diff options
| author | physcik <mynameisgennadiy@vk.com> | 2026-04-15 22:16:17 +0500 |
|---|---|---|
| committer | physcik <mynameisgennadiy@vk.com> | 2026-04-15 22:16:17 +0500 |
| commit | 9848b5589773a2d3e172fe72285b9203c36fd260 (patch) | |
| tree | a079f11e46c1e1eed76ff84d94dc90303dd05c9c /backend/src/Database | |
| parent | df1052bad682d957a60ded13cd6243bd44ca83e2 (diff) | |
Register endpoint
Diffstat (limited to 'backend/src/Database')
| -rw-r--r-- | backend/src/Database/Connection.zig | 1 | ||||
| -rw-r--r-- | backend/src/Database/UserAccessLayer.zig | 48 |
2 files changed, 49 insertions, 0 deletions
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; +} |
