Add id and created_at fields to db models

This commit is contained in:
jaina heartles 2022-07-22 00:08:01 -07:00
parent dc8877eef3
commit ab61efc44a
3 changed files with 35 additions and 15 deletions

View file

@ -127,7 +127,8 @@ pub const ApiServer = struct {
}
pub fn register(self: *ApiServer, info: RegistrationInfo) !models.Actor {
const id = Uuid.randV4(self.prng.random());
const actor_id = Uuid.randV4(self.prng.random());
const user_id = Uuid.randV4(self.prng.random());
// TODO: transaction?
if (try self.db.existsWhereEq(models.LocalUser, .username, info.username)) {
@ -144,12 +145,13 @@ pub const ApiServer = struct {
const now = DateTime.now();
const actor = models.Actor{
.id = id,
.id = actor_id,
.handle = info.username,
.created_at = now,
};
const user = models.LocalUser{
.actor_id = id,
.id = user_id,
.actor_id = actor_id,
.username = info.username,
.email = info.email,
.hashed_password = hash,
@ -191,7 +193,8 @@ pub const ApiServer = struct {
}
pub fn react(self: *ApiServer, note_id: Uuid, ctx: ApiContext) !void {
try self.db.insert(models.Reaction, .{ .note_id = note_id, .reactor_id = ctx.user_context.user.actor_id.? });
const id = Uuid.randV4(self.prng.random());
try self.db.insert(models.Reaction, .{ .id = id, .note_id = note_id, .reactor_id = ctx.user_context.user.actor_id.?, .created_at = DateTime.now() });
}
pub fn listReacts(self: *ApiServer, note_id: Uuid, ctx: ApiContext) ![]models.Reaction {

View file

@ -104,15 +104,18 @@ pub const Database = struct {
const init_sql_stmts = [_][]const u8{
\\CREATE TABLE IF NOT EXISTS
\\actor(
\\ id TEXT,
\\ id TEXT NOT NULL,
\\
\\ handle TEXT NOT NULL,
\\ created_at INTEGER NOT NULL,
\\
\\ PRIMARY KEY (id)
\\ PRIMARY KEY(id)
\\) STRICT;
,
\\CREATE TABLE IF NOT EXISTS
\\local_user(
\\ id TEXT NOT NULL,
\\
\\ username TEXT NOT NULL,
\\ actor_id TEXT,
\\ email TEXT,
@ -122,30 +125,35 @@ pub const Database = struct {
\\ password_changed_at INTEGER NOT NULL,
\\
\\ UNIQUE(actor_id),
\\ FOREIGN KEY (actor_id) REFERENCES actor(id),
\\ FOREIGN KEY(actor_id) REFERENCES actor(id),
\\
\\ PRIMARY KEY (username)
\\ PRIMARY KEY(id)
\\) STRICT;
,
\\CREATE TABLE IF NOT EXISTS
\\note(
\\ id TEXT PRIMARY KEY,
\\ id TEXT NOT NULL,
\\
\\ content TEXT NOT NULL,
\\ author_id TEXT NOT NULL,
\\ created_at INTEGER NOT NULL DEFAULT CURRENT_TIMESTAMP,
\\
\\ FOREIGN KEY (author_id) REFERENCES actor(id)
\\ FOREIGN KEY(author_id) REFERENCES actor(id),
\\
\\ PRIMARY KEY(id)
\\) STRICT;
,
\\CREATE TABLE IF NOT EXISTS
\\reaction(
\\ id TEXT NOT NULL,
\\
\\ reactor_id TEXT NOT NULL,
\\ note_id TEXT NOT NULL,
\\
\\ FOREIGN KEY(reactor_id) REFERENCES actor(id),
\\ FOREIGN KEY(note_id) REFERENCES note(id),
\\
\\ PRIMARY KEY(reactor_id, note_id)
\\ PRIMARY KEY(id)
\\) STRICT;
};

View file

@ -4,10 +4,15 @@ const util = @import("util");
const Uuid = util.Uuid;
const DateTime = util.DateTime;
// Used for documentation purposes
fn Ref(comptime _: type) type {
return Uuid;
}
pub const Note = struct {
id: Uuid,
content: []const u8,
author_id: Uuid,
author_id: Ref(Actor),
created_at: DateTime,
};
@ -20,7 +25,8 @@ pub const Actor = struct {
};
pub const LocalUser = struct {
actor_id: ?Uuid,
id: Uuid,
actor_id: ?Ref(Actor),
username: []const u8,
email: ?[]const u8,
@ -32,6 +38,9 @@ pub const LocalUser = struct {
};
pub const Reaction = struct {
reactor_id: Uuid,
note_id: Uuid,
id: Uuid,
reactor_id: Ref(Actor),
note_id: Ref(Note),
created_at: DateTime,
};