initial commit
This commit is contained in:
parent
9efc8a209b
commit
aabf45915a
48 changed files with 7400 additions and 0 deletions
9
database/sqlc.yaml
Normal file
9
database/sqlc.yaml
Normal file
|
@ -0,0 +1,9 @@
|
|||
version: "2"
|
||||
sql:
|
||||
- engine: "sqlite"
|
||||
queries: "./sqlite/query.sql"
|
||||
schema: "./sqlite/schema.sql"
|
||||
gen:
|
||||
go:
|
||||
package: "sqlite"
|
||||
out: "./sqlite/generated"
|
31
database/sqlite/generated/db.go
Normal file
31
database/sqlite/generated/db.go
Normal file
|
@ -0,0 +1,31 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.28.0
|
||||
|
||||
package sqlite
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
)
|
||||
|
||||
type DBTX interface {
|
||||
ExecContext(context.Context, string, ...interface{}) (sql.Result, error)
|
||||
PrepareContext(context.Context, string) (*sql.Stmt, error)
|
||||
QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error)
|
||||
QueryRowContext(context.Context, string, ...interface{}) *sql.Row
|
||||
}
|
||||
|
||||
func New(db DBTX) *Queries {
|
||||
return &Queries{db: db}
|
||||
}
|
||||
|
||||
type Queries struct {
|
||||
db DBTX
|
||||
}
|
||||
|
||||
func (q *Queries) WithTx(tx *sql.Tx) *Queries {
|
||||
return &Queries{
|
||||
db: tx,
|
||||
}
|
||||
}
|
155
database/sqlite/generated/models.go
Normal file
155
database/sqlite/generated/models.go
Normal file
|
@ -0,0 +1,155 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.28.0
|
||||
|
||||
package sqlite
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
)
|
||||
|
||||
type Annotation struct {
|
||||
ID int64
|
||||
UserID int64
|
||||
ObjectID sql.NullInt64
|
||||
EventID sql.NullInt64
|
||||
CheckInID sql.NullInt64
|
||||
EventsObjectID sql.NullInt64
|
||||
Text string
|
||||
Datetime string
|
||||
}
|
||||
|
||||
type CheckIn struct {
|
||||
ID int64
|
||||
UserID int64
|
||||
CheckinEventID int64
|
||||
EventID sql.NullInt64
|
||||
ObjectID sql.NullInt64
|
||||
CheckinStateID int64
|
||||
Datetime string
|
||||
}
|
||||
|
||||
type CheckInLog struct {
|
||||
CheckInID int64
|
||||
Username string
|
||||
EventName string
|
||||
ObjectName string
|
||||
Datetime string
|
||||
CheckinState string
|
||||
}
|
||||
|
||||
type CheckinEvent struct {
|
||||
ID int64
|
||||
Name string
|
||||
}
|
||||
|
||||
type CheckinState struct {
|
||||
ID int64
|
||||
Name string
|
||||
}
|
||||
|
||||
type Event struct {
|
||||
ID int64
|
||||
UserID int64
|
||||
Name string
|
||||
Description sql.NullString
|
||||
Location sql.NullString
|
||||
StartDate string
|
||||
EndDate string
|
||||
}
|
||||
|
||||
type EventDetail struct {
|
||||
EventID int64
|
||||
EventName string
|
||||
Description sql.NullString
|
||||
Location sql.NullString
|
||||
StartDate string
|
||||
EndDate string
|
||||
Organizer string
|
||||
}
|
||||
|
||||
type EventsObject struct {
|
||||
ID int64
|
||||
EventID int64
|
||||
ObjectID int64
|
||||
}
|
||||
|
||||
type Object struct {
|
||||
ID int64
|
||||
StoragespaceID int64
|
||||
Name string
|
||||
Description sql.NullString
|
||||
Serialnumber sql.NullString
|
||||
Created sql.NullTime
|
||||
}
|
||||
|
||||
type ObjectClass struct {
|
||||
ID int64
|
||||
ObjectClassParentID sql.NullInt64
|
||||
Name string
|
||||
}
|
||||
|
||||
type ObjectClassField struct {
|
||||
ID int64
|
||||
ObjectClassID int64
|
||||
Name string
|
||||
Type string
|
||||
}
|
||||
|
||||
type ObjectFieldsContent struct {
|
||||
ID int64
|
||||
ObjectClassFieldID int64
|
||||
Content string
|
||||
}
|
||||
|
||||
type ObjectStorage struct {
|
||||
ObjectID int64
|
||||
ObjectName string
|
||||
StorageLocation sql.NullString
|
||||
}
|
||||
|
||||
type Picture struct {
|
||||
ID int64
|
||||
UserID int64
|
||||
StoragespaceID sql.NullInt64
|
||||
ObjectID sql.NullInt64
|
||||
EventID sql.NullInt64
|
||||
CheckInID sql.NullInt64
|
||||
Path string
|
||||
Description sql.NullString
|
||||
Datetime string
|
||||
}
|
||||
|
||||
type Storagespace struct {
|
||||
ID int64
|
||||
Parent sql.NullInt64
|
||||
Location sql.NullString
|
||||
}
|
||||
|
||||
type User struct {
|
||||
ID int64
|
||||
Username string
|
||||
}
|
||||
|
||||
type UserSession struct {
|
||||
ID int64
|
||||
UserID int64
|
||||
SessionToken string
|
||||
CreatedAt string
|
||||
ValidUntil string
|
||||
Name sql.NullString
|
||||
}
|
||||
|
||||
type UserSessionsView struct {
|
||||
UserID int64
|
||||
Username string
|
||||
SessionToken string
|
||||
CreatedAt string
|
||||
ValidUntil string
|
||||
}
|
||||
|
||||
type UserloginProvider struct {
|
||||
ID int64
|
||||
UserID int64
|
||||
LoginStub string
|
||||
}
|
452
database/sqlite/generated/query.sql.go
Normal file
452
database/sqlite/generated/query.sql.go
Normal file
|
@ -0,0 +1,452 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.28.0
|
||||
// source: query.sql
|
||||
|
||||
package sqlite
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
)
|
||||
|
||||
const addAnnotation = `-- name: AddAnnotation :exec
|
||||
INSERT INTO annotations (user_ID, object_ID, event_ID, check_in_ID, events_object_ID, text, datetime)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
`
|
||||
|
||||
type AddAnnotationParams struct {
|
||||
UserID int64
|
||||
ObjectID sql.NullInt64
|
||||
EventID sql.NullInt64
|
||||
CheckInID sql.NullInt64
|
||||
EventsObjectID sql.NullInt64
|
||||
Text string
|
||||
Datetime string
|
||||
}
|
||||
|
||||
func (q *Queries) AddAnnotation(ctx context.Context, arg AddAnnotationParams) error {
|
||||
_, err := q.db.ExecContext(ctx, addAnnotation,
|
||||
arg.UserID,
|
||||
arg.ObjectID,
|
||||
arg.EventID,
|
||||
arg.CheckInID,
|
||||
arg.EventsObjectID,
|
||||
arg.Text,
|
||||
arg.Datetime,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
const addCheckIn = `-- name: AddCheckIn :exec
|
||||
INSERT INTO check_in (user_ID, checkin_event_ID, event_ID, object_ID, checkin_state_ID, datetime)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
`
|
||||
|
||||
type AddCheckInParams struct {
|
||||
UserID int64
|
||||
CheckinEventID int64
|
||||
EventID sql.NullInt64
|
||||
ObjectID sql.NullInt64
|
||||
CheckinStateID int64
|
||||
Datetime string
|
||||
}
|
||||
|
||||
func (q *Queries) AddCheckIn(ctx context.Context, arg AddCheckInParams) error {
|
||||
_, err := q.db.ExecContext(ctx, addCheckIn,
|
||||
arg.UserID,
|
||||
arg.CheckinEventID,
|
||||
arg.EventID,
|
||||
arg.ObjectID,
|
||||
arg.CheckinStateID,
|
||||
arg.Datetime,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
const addObject = `-- name: AddObject :exec
|
||||
INSERT INTO objects (storagespace_ID, Name, Description, Serialnumber, created)
|
||||
VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
|
||||
`
|
||||
|
||||
type AddObjectParams struct {
|
||||
StoragespaceID int64
|
||||
Name string
|
||||
Description sql.NullString
|
||||
Serialnumber sql.NullString
|
||||
}
|
||||
|
||||
func (q *Queries) AddObject(ctx context.Context, arg AddObjectParams) error {
|
||||
_, err := q.db.ExecContext(ctx, addObject,
|
||||
arg.StoragespaceID,
|
||||
arg.Name,
|
||||
arg.Description,
|
||||
arg.Serialnumber,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
const addPicture = `-- name: AddPicture :exec
|
||||
INSERT INTO pictures (user_ID, storagespace_ID, object_ID, event_ID, check_in_ID, Path, Description, datetime)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
||||
`
|
||||
|
||||
type AddPictureParams struct {
|
||||
UserID int64
|
||||
StoragespaceID sql.NullInt64
|
||||
ObjectID sql.NullInt64
|
||||
EventID sql.NullInt64
|
||||
CheckInID sql.NullInt64
|
||||
Path string
|
||||
Description sql.NullString
|
||||
Datetime string
|
||||
}
|
||||
|
||||
func (q *Queries) AddPicture(ctx context.Context, arg AddPictureParams) error {
|
||||
_, err := q.db.ExecContext(ctx, addPicture,
|
||||
arg.UserID,
|
||||
arg.StoragespaceID,
|
||||
arg.ObjectID,
|
||||
arg.EventID,
|
||||
arg.CheckInID,
|
||||
arg.Path,
|
||||
arg.Description,
|
||||
arg.Datetime,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
const addUser = `-- name: AddUser :exec
|
||||
INSERT INTO users (Username) VALUES (?)
|
||||
`
|
||||
|
||||
func (q *Queries) AddUser(ctx context.Context, username string) error {
|
||||
_, err := q.db.ExecContext(ctx, addUser, username)
|
||||
return err
|
||||
}
|
||||
|
||||
const addUserSession = `-- name: AddUserSession :exec
|
||||
INSERT INTO user_sessions (user_ID, session_token, created_at, valid_until, name)
|
||||
VALUES (?, ?, ?, ?, ?)
|
||||
`
|
||||
|
||||
type AddUserSessionParams struct {
|
||||
UserID int64
|
||||
SessionToken string
|
||||
CreatedAt string
|
||||
ValidUntil string
|
||||
Name sql.NullString
|
||||
}
|
||||
|
||||
func (q *Queries) AddUserSession(ctx context.Context, arg AddUserSessionParams) error {
|
||||
_, err := q.db.ExecContext(ctx, addUserSession,
|
||||
arg.UserID,
|
||||
arg.SessionToken,
|
||||
arg.CreatedAt,
|
||||
arg.ValidUntil,
|
||||
arg.Name,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
const createEvent = `-- name: CreateEvent :exec
|
||||
INSERT INTO events (user_ID, Name, Description, Location, Start_Date, End_Date)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
`
|
||||
|
||||
type CreateEventParams struct {
|
||||
UserID int64
|
||||
Name string
|
||||
Description sql.NullString
|
||||
Location sql.NullString
|
||||
StartDate string
|
||||
EndDate string
|
||||
}
|
||||
|
||||
func (q *Queries) CreateEvent(ctx context.Context, arg CreateEventParams) error {
|
||||
_, err := q.db.ExecContext(ctx, createEvent,
|
||||
arg.UserID,
|
||||
arg.Name,
|
||||
arg.Description,
|
||||
arg.Location,
|
||||
arg.StartDate,
|
||||
arg.EndDate,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
const getAllUsers = `-- name: GetAllUsers :many
|
||||
SELECT id, username FROM users
|
||||
`
|
||||
|
||||
func (q *Queries) GetAllUsers(ctx context.Context) ([]User, error) {
|
||||
rows, err := q.db.QueryContext(ctx, getAllUsers)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []User
|
||||
for rows.Next() {
|
||||
var i User
|
||||
if err := rows.Scan(&i.ID, &i.Username); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const getEventCheckIns = `-- name: GetEventCheckIns :many
|
||||
SELECT check_in_id, username, event_name, object_name, datetime, checkin_state FROM check_in_log WHERE event_name = ?
|
||||
`
|
||||
|
||||
func (q *Queries) GetEventCheckIns(ctx context.Context, eventName string) ([]CheckInLog, error) {
|
||||
rows, err := q.db.QueryContext(ctx, getEventCheckIns, eventName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []CheckInLog
|
||||
for rows.Next() {
|
||||
var i CheckInLog
|
||||
if err := rows.Scan(
|
||||
&i.CheckInID,
|
||||
&i.Username,
|
||||
&i.EventName,
|
||||
&i.ObjectName,
|
||||
&i.Datetime,
|
||||
&i.CheckinState,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const getEventObjects = `-- name: GetEventObjects :many
|
||||
SELECT objects.id, objects.storagespace_id, objects.name, objects.description, objects.serialnumber, objects.created FROM objects
|
||||
JOIN events_objects ON objects.ID = events_objects.object_ID
|
||||
WHERE events_objects.event_ID = ?
|
||||
`
|
||||
|
||||
func (q *Queries) GetEventObjects(ctx context.Context, eventID int64) ([]Object, error) {
|
||||
rows, err := q.db.QueryContext(ctx, getEventObjects, eventID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []Object
|
||||
for rows.Next() {
|
||||
var i Object
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.StoragespaceID,
|
||||
&i.Name,
|
||||
&i.Description,
|
||||
&i.Serialnumber,
|
||||
&i.Created,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const getEventPictures = `-- name: GetEventPictures :many
|
||||
SELECT id, user_id, storagespace_id, object_id, event_id, check_in_id, path, description, datetime FROM pictures WHERE event_ID = ?
|
||||
`
|
||||
|
||||
func (q *Queries) GetEventPictures(ctx context.Context, eventID sql.NullInt64) ([]Picture, error) {
|
||||
rows, err := q.db.QueryContext(ctx, getEventPictures, eventID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []Picture
|
||||
for rows.Next() {
|
||||
var i Picture
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.UserID,
|
||||
&i.StoragespaceID,
|
||||
&i.ObjectID,
|
||||
&i.EventID,
|
||||
&i.CheckInID,
|
||||
&i.Path,
|
||||
&i.Description,
|
||||
&i.Datetime,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const getObjectAnnotations = `-- name: GetObjectAnnotations :many
|
||||
SELECT id, user_id, object_id, event_id, check_in_id, events_object_id, text, datetime FROM annotations WHERE object_ID = ?
|
||||
`
|
||||
|
||||
func (q *Queries) GetObjectAnnotations(ctx context.Context, objectID sql.NullInt64) ([]Annotation, error) {
|
||||
rows, err := q.db.QueryContext(ctx, getObjectAnnotations, objectID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []Annotation
|
||||
for rows.Next() {
|
||||
var i Annotation
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.UserID,
|
||||
&i.ObjectID,
|
||||
&i.EventID,
|
||||
&i.CheckInID,
|
||||
&i.EventsObjectID,
|
||||
&i.Text,
|
||||
&i.Datetime,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const getObjectsInStorage = `-- name: GetObjectsInStorage :many
|
||||
SELECT object_id, object_name, storage_location FROM object_storage WHERE storage_location = ?
|
||||
`
|
||||
|
||||
func (q *Queries) GetObjectsInStorage(ctx context.Context, storageLocation sql.NullString) ([]ObjectStorage, error) {
|
||||
rows, err := q.db.QueryContext(ctx, getObjectsInStorage, storageLocation)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []ObjectStorage
|
||||
for rows.Next() {
|
||||
var i ObjectStorage
|
||||
if err := rows.Scan(&i.ObjectID, &i.ObjectName, &i.StorageLocation); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const getUserByID = `-- name: GetUserByID :one
|
||||
SELECT id, username FROM users WHERE ID = ?
|
||||
`
|
||||
|
||||
func (q *Queries) GetUserByID(ctx context.Context, id int64) (User, error) {
|
||||
row := q.db.QueryRowContext(ctx, getUserByID, id)
|
||||
var i User
|
||||
err := row.Scan(&i.ID, &i.Username)
|
||||
return i, err
|
||||
}
|
||||
|
||||
const getUserEvents = `-- name: GetUserEvents :many
|
||||
SELECT event_id, event_name, description, location, start_date, end_date, organizer FROM event_details WHERE organizer = ?
|
||||
`
|
||||
|
||||
func (q *Queries) GetUserEvents(ctx context.Context, organizer string) ([]EventDetail, error) {
|
||||
rows, err := q.db.QueryContext(ctx, getUserEvents, organizer)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []EventDetail
|
||||
for rows.Next() {
|
||||
var i EventDetail
|
||||
if err := rows.Scan(
|
||||
&i.EventID,
|
||||
&i.EventName,
|
||||
&i.Description,
|
||||
&i.Location,
|
||||
&i.StartDate,
|
||||
&i.EndDate,
|
||||
&i.Organizer,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const getUserSessions = `-- name: GetUserSessions :many
|
||||
SELECT user_id, username, session_token, created_at, valid_until FROM user_sessions_view WHERE user_ID = ?
|
||||
`
|
||||
|
||||
func (q *Queries) GetUserSessions(ctx context.Context, userID int64) ([]UserSessionsView, error) {
|
||||
rows, err := q.db.QueryContext(ctx, getUserSessions, userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []UserSessionsView
|
||||
for rows.Next() {
|
||||
var i UserSessionsView
|
||||
if err := rows.Scan(
|
||||
&i.UserID,
|
||||
&i.Username,
|
||||
&i.SessionToken,
|
||||
&i.CreatedAt,
|
||||
&i.ValidUntil,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
144
database/sqlite/migration/00001_init.sql
Normal file
144
database/sqlite/migration/00001_init.sql
Normal file
|
@ -0,0 +1,144 @@
|
|||
-- +goose Up
|
||||
-- SQL in section 'Up' is executed when this migration is applied.
|
||||
CREATE TABLE users
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
Username TEXT UNIQUE NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE userlogin_provider
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_ID INTEGER NOT NULL,
|
||||
login_stub TEXT UNIQUE NOT NULL,
|
||||
FOREIGN KEY (user_ID) REFERENCES users (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE user_sessions
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_ID INTEGER NOT NULL,
|
||||
session_token TEXT UNIQUE NOT NULL,
|
||||
created_at TEXT NOT NULL,
|
||||
valid_until TEXT NOT NULL,
|
||||
name TEXT,
|
||||
FOREIGN KEY (user_ID) REFERENCES users (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE storagespace
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
Parent INTEGER,
|
||||
Location TEXT,
|
||||
FOREIGN KEY (Parent) REFERENCES storagespace (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE objects
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
storagespace_ID INTEGER NOT NULL,
|
||||
Name TEXT NOT NULL,
|
||||
Description TEXT,
|
||||
Serialnumber TEXT UNIQUE,
|
||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (storagespace_ID) REFERENCES storagespace (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE events
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_ID INTEGER NOT NULL,
|
||||
Name TEXT NOT NULL,
|
||||
Description TEXT,
|
||||
Location TEXT,
|
||||
Start_Date TEXT NOT NULL,
|
||||
End_Date TEXT NOT NULL,
|
||||
FOREIGN KEY (user_ID) REFERENCES users (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE pictures
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_ID INTEGER NOT NULL,
|
||||
storagespace_ID INTEGER,
|
||||
object_ID INTEGER,
|
||||
event_ID INTEGER,
|
||||
check_in_ID INTEGER,
|
||||
Path TEXT NOT NULL,
|
||||
Description TEXT,
|
||||
datetime TEXT NOT NULL,
|
||||
FOREIGN KEY (user_ID) REFERENCES users (ID),
|
||||
FOREIGN KEY (storagespace_ID) REFERENCES storagespace (ID),
|
||||
FOREIGN KEY (object_ID) REFERENCES objects (ID),
|
||||
FOREIGN KEY (event_ID) REFERENCES events (ID),
|
||||
FOREIGN KEY (check_in_ID) REFERENCES check_in (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE events_objects
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
event_ID INTEGER NOT NULL,
|
||||
object_ID INTEGER NOT NULL,
|
||||
FOREIGN KEY (event_ID) REFERENCES events (ID),
|
||||
FOREIGN KEY (object_ID) REFERENCES objects (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE checkin_events
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
Name TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE checkin_states
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
Name TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE check_in
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_ID INTEGER NOT NULL,
|
||||
checkin_event_ID INTEGER NOT NULL,
|
||||
event_ID INTEGER,
|
||||
object_ID INTEGER,
|
||||
checkin_state_ID INTEGER NOT NULL,
|
||||
datetime TEXT NOT NULL,
|
||||
FOREIGN KEY (user_ID) REFERENCES users (ID),
|
||||
FOREIGN KEY (checkin_event_ID) REFERENCES checkin_events (ID),
|
||||
FOREIGN KEY (event_ID) REFERENCES events (ID),
|
||||
FOREIGN KEY (object_ID) REFERENCES objects (ID),
|
||||
FOREIGN KEY (checkin_state_ID) REFERENCES checkin_states (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE annotations
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_ID INTEGER NOT NULL,
|
||||
object_ID INTEGER,
|
||||
event_ID INTEGER,
|
||||
check_in_ID INTEGER,
|
||||
events_object_ID INTEGER,
|
||||
text TEXT NOT NULL,
|
||||
datetime TEXT NOT NULL,
|
||||
FOREIGN KEY (user_ID) REFERENCES users (ID),
|
||||
FOREIGN KEY (object_ID) REFERENCES objects (ID),
|
||||
FOREIGN KEY (event_ID) REFERENCES events (ID),
|
||||
FOREIGN KEY (check_in_ID) REFERENCES check_in (ID),
|
||||
FOREIGN KEY (events_object_ID) REFERENCES events_objects (ID)
|
||||
);
|
||||
|
||||
-- +goose Down
|
||||
-- SQL in section 'Down' is executed when this migration is rolled back.
|
||||
DROP TABLE IF EXISTS annotations;
|
||||
DROP TABLE IF EXISTS check_in;
|
||||
DROP TABLE IF EXISTS checkin_states;
|
||||
DROP TABLE IF EXISTS checkin_events;
|
||||
DROP TABLE IF EXISTS events_objects;
|
||||
DROP TABLE IF EXISTS pictures;
|
||||
DROP TABLE IF EXISTS events;
|
||||
DROP TABLE IF EXISTS objects;
|
||||
DROP TABLE IF EXISTS storagespace;
|
||||
DROP TABLE IF EXISTS user_sessions;
|
||||
DROP TABLE IF EXISTS userlogin_provider;
|
||||
DROP TABLE IF EXISTS users;
|
55
database/sqlite/query.sql
Normal file
55
database/sqlite/query.sql
Normal file
|
@ -0,0 +1,55 @@
|
|||
-- name: GetAllUsers :many
|
||||
SELECT * FROM users;
|
||||
|
||||
-- name: GetUserByID :one
|
||||
SELECT * FROM users WHERE ID = ?;
|
||||
|
||||
-- name: AddUser :exec
|
||||
INSERT INTO users (Username) VALUES (?);
|
||||
|
||||
-- name: GetUserSessions :many
|
||||
SELECT * FROM user_sessions_view WHERE user_ID = ?;
|
||||
|
||||
-- name: AddUserSession :exec
|
||||
INSERT INTO user_sessions (user_ID, session_token, created_at, valid_until, name)
|
||||
VALUES (?, ?, ?, ?, ?);
|
||||
|
||||
-- name: GetObjectsInStorage :many
|
||||
SELECT * FROM object_storage WHERE storage_location = ?;
|
||||
|
||||
-- name: GetUserEvents :many
|
||||
SELECT * FROM event_details WHERE organizer = ?;
|
||||
|
||||
-- name: GetEventObjects :many
|
||||
SELECT objects.* FROM objects
|
||||
JOIN events_objects ON objects.ID = events_objects.object_ID
|
||||
WHERE events_objects.event_ID = ?;
|
||||
|
||||
-- name: AddObject :exec
|
||||
INSERT INTO objects (storagespace_ID, Name, Description, Serialnumber, created)
|
||||
VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP);
|
||||
|
||||
-- name: CreateEvent :exec
|
||||
INSERT INTO events (user_ID, Name, Description, Location, Start_Date, End_Date)
|
||||
VALUES (?, ?, ?, ?, ?, ?);
|
||||
|
||||
-- name: GetEventCheckIns :many
|
||||
SELECT * FROM check_in_log WHERE event_name = ?;
|
||||
|
||||
-- name: AddCheckIn :exec
|
||||
INSERT INTO check_in (user_ID, checkin_event_ID, event_ID, object_ID, checkin_state_ID, datetime)
|
||||
VALUES (?, ?, ?, ?, ?, ?);
|
||||
|
||||
-- name: GetObjectAnnotations :many
|
||||
SELECT * FROM annotations WHERE object_ID = ?;
|
||||
|
||||
-- name: AddAnnotation :exec
|
||||
INSERT INTO annotations (user_ID, object_ID, event_ID, check_in_ID, events_object_ID, text, datetime)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?);
|
||||
|
||||
-- name: GetEventPictures :many
|
||||
SELECT * FROM pictures WHERE event_ID = ?;
|
||||
|
||||
-- name: AddPicture :exec
|
||||
INSERT INTO pictures (user_ID, storagespace_ID, object_ID, event_ID, check_in_ID, Path, Description, datetime)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?);
|
191
database/sqlite/schema.sql
Normal file
191
database/sqlite/schema.sql
Normal file
|
@ -0,0 +1,191 @@
|
|||
CREATE TABLE users
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
Username TEXT UNIQUE NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE userlogin_provider
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_ID INTEGER NOT NULL,
|
||||
login_stub TEXT UNIQUE NOT NULL,
|
||||
FOREIGN KEY (user_ID) REFERENCES users (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE user_sessions
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_ID INTEGER NOT NULL,
|
||||
session_token TEXT UNIQUE NOT NULL,
|
||||
created_at TEXT NOT NULL,
|
||||
valid_until TEXT NOT NULL,
|
||||
name TEXT,
|
||||
FOREIGN KEY (user_ID) REFERENCES users (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE storagespace
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
Parent INTEGER,
|
||||
Location TEXT,
|
||||
FOREIGN KEY (Parent) REFERENCES storagespace (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE objects
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
storagespace_ID INTEGER NOT NULL,
|
||||
Name TEXT NOT NULL,
|
||||
Description TEXT,
|
||||
Serialnumber TEXT UNIQUE,
|
||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (storagespace_ID) REFERENCES storagespace (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE events
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_ID INTEGER NOT NULL,
|
||||
Name TEXT NOT NULL,
|
||||
Description TEXT,
|
||||
Location TEXT,
|
||||
Start_Date TEXT NOT NULL,
|
||||
End_Date TEXT NOT NULL,
|
||||
FOREIGN KEY (user_ID) REFERENCES users (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE pictures
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_ID INTEGER NOT NULL,
|
||||
storagespace_ID INTEGER,
|
||||
object_ID INTEGER,
|
||||
event_ID INTEGER,
|
||||
check_in_ID INTEGER,
|
||||
Path TEXT NOT NULL,
|
||||
Description TEXT,
|
||||
datetime TEXT NOT NULL,
|
||||
FOREIGN KEY (user_ID) REFERENCES users (ID),
|
||||
FOREIGN KEY (storagespace_ID) REFERENCES storagespace (ID),
|
||||
FOREIGN KEY (object_ID) REFERENCES objects (ID),
|
||||
FOREIGN KEY (event_ID) REFERENCES events (ID),
|
||||
FOREIGN KEY (check_in_ID) REFERENCES check_in (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE events_objects
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
event_ID INTEGER NOT NULL,
|
||||
object_ID INTEGER NOT NULL,
|
||||
FOREIGN KEY (event_ID) REFERENCES events (ID),
|
||||
FOREIGN KEY (object_ID) REFERENCES objects (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE checkin_events
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
Name TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE checkin_states
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
Name TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE check_in
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_ID INTEGER NOT NULL,
|
||||
checkin_event_ID INTEGER NOT NULL,
|
||||
event_ID INTEGER,
|
||||
object_ID INTEGER,
|
||||
checkin_state_ID INTEGER NOT NULL,
|
||||
datetime TEXT NOT NULL,
|
||||
FOREIGN KEY (user_ID) REFERENCES users (ID),
|
||||
FOREIGN KEY (checkin_event_ID) REFERENCES checkin_events (ID),
|
||||
FOREIGN KEY (event_ID) REFERENCES events (ID),
|
||||
FOREIGN KEY (object_ID) REFERENCES objects (ID),
|
||||
FOREIGN KEY (checkin_state_ID) REFERENCES checkin_states (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE annotations
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_ID INTEGER NOT NULL,
|
||||
object_ID INTEGER,
|
||||
event_ID INTEGER,
|
||||
check_in_ID INTEGER,
|
||||
events_object_ID INTEGER,
|
||||
text TEXT NOT NULL,
|
||||
datetime TEXT NOT NULL,
|
||||
FOREIGN KEY (user_ID) REFERENCES users (ID),
|
||||
FOREIGN KEY (object_ID) REFERENCES objects (ID),
|
||||
FOREIGN KEY (event_ID) REFERENCES events (ID),
|
||||
FOREIGN KEY (check_in_ID) REFERENCES check_in (ID),
|
||||
FOREIGN KEY (events_object_ID) REFERENCES events_objects (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE object_class
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
object_class_parent_ID INTEGER,
|
||||
Name TEXT NOT NULL,
|
||||
FOREIGN KEY (object_class_parent_ID) REFERENCES object_class (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE object_class_fields
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
object_class_ID INTEGER NOT NULL,
|
||||
Name TEXT NOT NULL,
|
||||
Type TEXT NOT NULL,
|
||||
FOREIGN KEY (object_class_ID) REFERENCES object_class (ID)
|
||||
);
|
||||
|
||||
CREATE TABLE object_fields_content
|
||||
(
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
object_class_field_ID INTEGER NOT NULL,
|
||||
Content TEXT NOT NULL,
|
||||
FOREIGN KEY (object_class_field_ID) REFERENCES object_class_fields (ID)
|
||||
);
|
||||
|
||||
-- Views for useful relations
|
||||
CREATE VIEW user_sessions_view AS
|
||||
SELECT users.ID AS user_ID,
|
||||
users.Username,
|
||||
user_sessions.session_token,
|
||||
user_sessions.created_at,
|
||||
user_sessions.valid_until
|
||||
FROM users
|
||||
JOIN user_sessions ON users.ID = user_sessions.user_ID;
|
||||
|
||||
CREATE VIEW event_details AS
|
||||
SELECT events.ID AS event_ID,
|
||||
events.Name AS event_name,
|
||||
events.Description,
|
||||
events.Location,
|
||||
events.Start_Date,
|
||||
events.End_Date,
|
||||
users.Username AS organizer
|
||||
FROM events
|
||||
JOIN users ON events.user_ID = users.ID;
|
||||
|
||||
CREATE VIEW object_storage AS
|
||||
SELECT objects.ID AS object_ID, objects.Name AS object_name, storagespace.Location AS storage_location
|
||||
FROM objects
|
||||
JOIN storagespace ON objects.storagespace_ID = storagespace.ID;
|
||||
|
||||
CREATE VIEW check_in_log AS
|
||||
SELECT check_in.ID AS check_in_ID,
|
||||
users.Username,
|
||||
events.Name AS event_name,
|
||||
objects.Name AS object_name,
|
||||
check_in.datetime,
|
||||
checkin_states.Name AS checkin_state
|
||||
FROM check_in
|
||||
JOIN users ON check_in.user_ID = users.ID
|
||||
JOIN events ON check_in.event_ID = events.ID
|
||||
JOIN objects ON check_in.object_ID = objects.ID
|
||||
JOIN checkin_states ON check_in.checkin_state_ID = checkin_states.ID;
|
Loading…
Add table
Add a link
Reference in a new issue