summaryrefslogtreecommitdiff
path: root/backend/src/Models/User.zig
diff options
context:
space:
mode:
authorphyscik <mynameisgennadiy@vk.com>2026-04-15 15:04:24 +0500
committerphyscik <mynameisgennadiy@vk.com>2026-04-15 15:04:24 +0500
commitfba8330783caed87a4603f200bdeae634a13348d (patch)
tree6896054e4085353c8c4aa42afdc37c372a1155c1 /backend/src/Models/User.zig
parentf8e6072f8713f79926fa97092ee8b269109fc696 (diff)
User model pt 1
Diffstat (limited to 'backend/src/Models/User.zig')
-rw-r--r--backend/src/Models/User.zig47
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);
+}