From 9848b5589773a2d3e172fe72285b9203c36fd260 Mon Sep 17 00:00:00 2001 From: physcik Date: Wed, 15 Apr 2026 22:16:17 +0500 Subject: Register endpoint --- backend/src/Database/Connection.zig | 1 + backend/src/Database/UserAccessLayer.zig | 48 ++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 backend/src/Database/UserAccessLayer.zig (limited to 'backend/src/Database') diff --git a/backend/src/Database/Connection.zig b/backend/src/Database/Connection.zig index e08760c..0114cba 100644 --- a/backend/src/Database/Connection.zig +++ b/backend/src/Database/Connection.zig @@ -32,4 +32,5 @@ pub fn Disconnect() void { pool.deinit(); } +pub const Users = @import("UserAccessLayer.zig"); pub const RangedWeapons = @import("RangedWeaponsAccessLayer.zig"); diff --git a/backend/src/Database/UserAccessLayer.zig b/backend/src/Database/UserAccessLayer.zig new file mode 100644 index 0000000..46692ad --- /dev/null +++ b/backend/src/Database/UserAccessLayer.zig @@ -0,0 +1,48 @@ +// You are not supposed to include this file. To access this you should use +// Connection.Users. + +const conn = @import("Connection.zig"); +const std = @import("std"); +const pg = @import("pg"); +const model = @import("../Models/User.zig"); + + +pub fn Create(NewUser: *model.User) !void { + if (try ExistsByUsername(NewUser.Username)) + return conn.ResultErrors.AlreadyExists; + const query = + \\ INSERT INTO Users + \\ (Username, PasswordHash, Role) + \\ VALUES + \\ ($1, $2, $3) + ; + + _ = try conn.pool.exec(query, .{ + NewUser.Username, + NewUser.PasswordHash, + model.Role.ToString(NewUser.Role), + }); +} + +pub fn GetByCredentials(allocator: std.mem.Allocator, username: []const u8, passwordHash: []const u8) !model.User { + const query = + \\ SELECT * FROM Users WHERE + \\ Username = $1 AND PasswordHash = $2 + ; + var row = try conn.pool.row(query, .{ username, passwordHash }) orelse { + return conn.ResultErrors.NotFound; + }; + + const outp = try model.User.MapWithAllocator(allocator, row.row); + try row.deinit(); + return outp; +} + +pub fn ExistsByUsername(username: []const u8) !bool { + const query = "SELECT Id FROM Users WHERE Username = $1"; + var row = try conn.pool.row(query, .{username}) orelse { + return false; + }; + try row.deinit(); + return true; +} -- cgit v1.3