a mini social media app for small communities

database spec#

i have a mental map of the databases in use for beep, but that does not mean others also do. along with that, having a visual representation is probably going to be pretty useful. so with that said, i present to you, the database spec for beep:

User#

represents a registered user

name type desc
id int identifier this user on the backend
username string identifier this user on the frontend
nickname ?string optional nickname for this user on the frontend
password string hashed and salted password for this user
password_salt string salt for this user's password
muted bool controls whether or not this user can make posts
admin bool controls whether or not this user is an admin
automated bool controls whether or not this user is automated
theme ?string controls per-user css themes
css ?string controls per-user css
bio string bio for this user
pronouns string pronouns for this user
created_at time.Time a timestamp of when this user was made

Post#

represents a public post

name type desc
id int identifier for this post
author_id int id of the user that authored this post
replying_to ?int id of the post that this post is replying to
title string the title of this post
body string the body of this post
pinned bool if this post in globally pinned
nsfw bool if this post in marked as nsfw
posted_at time.Time a timestamp of when this post was made

Like#

represents all likes and dislikes on posts for this beep instance

name type desc
id int identifier for this (dis)like
user_id int the user that sent this (dis)like
post_id int the post this (dis)like is for
is_like bool true if this is a like, false if a dislike

LikeCache#

stores total likes for a post

name type desc
id int identifier for this entry
post_id int the post this entry is for
likes int the net amount of likes this post has

Site#

stores mutable, site-wide data. there should only ever be one entry here

name type desc
id int identifier for this (should always be 0)
motd string the message of the day displayed on /index

Notification#

represents a notification sent to a user

name type desc
id int identifier for this notification
user_id int the user that receives this notification
summary string the summary for this notification
body string the full text for this notification

SavedPost#

a list of saved posts for a user

name type desc
id int identifier for this entry, this is mostly unused
post_id int the id of the post this entry relates to
user_id int the id of the user that saved this post
saved bool if this post is saved
later bool if this post is saved in "read later"