diff options
| author | physcik <mynameisgennadiy@vk.com> | 2026-04-15 15:04:24 +0500 |
|---|---|---|
| committer | physcik <mynameisgennadiy@vk.com> | 2026-04-15 15:04:24 +0500 |
| commit | fba8330783caed87a4603f200bdeae634a13348d (patch) | |
| tree | 6896054e4085353c8c4aa42afdc37c372a1155c1 /backend/src/Models | |
| parent | f8e6072f8713f79926fa97092ee8b269109fc696 (diff) | |
User model pt 1
Diffstat (limited to 'backend/src/Models')
| -rw-r--r-- | backend/src/Models/User.zig | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/backend/src/Models/User.zig b/backend/src/Models/User.zig new file mode 100644 index 0000000..1b7943a --- /dev/null +++ b/backend/src/Models/User.zig @@ -0,0 +1,47 @@ +const std = @import("std"); +const pg = @import("pg"); + +const RoleError = error { + NotSupported +}; + +const RolesMap = std.static_string_map.StaticStringMap(Role).initComptime(.{ + .{ "user", .user }, + .{ "editor", .editor }, +}); + +pub const Role = enum { + user, + editor, + + pub fn ToString(self: Role) []const u8 { + return switch (self) { + .user => "user", + .editor => "editor" + }; + } + + pub fn FromString(string: []const u8) !Role { + return RolesMap.get(string) orelse RoleError.NotSupported; + } +}; + +pub const User = struct { + // UUID + Id: [36]u8, + Username: []const u8, + PasswordHash: []const u8, + Role: []const u8 + + // pub fn Map(row: *const pg.Row) !User { + // } +}; + +test "Roles transformation" { + const roleString = "user"; + const roleVar: Role = .editor; + + try std.testing.expectEqualStrings("editor", Role.ToString(roleVar)); + const actual = try Role.FromString(roleString); + try std.testing.expectEqual(Role.user, actual); +} |
