initial commit
This commit is contained in:
89
internal/database/database.go
Normal file
89
internal/database/database.go
Normal file
@@ -0,0 +1,89 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
)
|
||||
|
||||
type Client struct {
|
||||
db *sql.DB
|
||||
}
|
||||
|
||||
func NewClient(pathToDB string) (Client, error) {
|
||||
db, err := sql.Open("sqlite3", pathToDB)
|
||||
if err != nil {
|
||||
return Client{}, err
|
||||
}
|
||||
c := Client{db}
|
||||
err = c.autoMigrate()
|
||||
if err != nil {
|
||||
return Client{}, err
|
||||
}
|
||||
return c, nil
|
||||
|
||||
}
|
||||
|
||||
func (c *Client) autoMigrate() error {
|
||||
userTable := `
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id TEXT PRIMARY KEY,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
password TEXT NOT NULL,
|
||||
email TEXT UNIQUE NOT NULL
|
||||
);
|
||||
`
|
||||
_, err := c.db.Exec(userTable)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
refreshTokenTable := `
|
||||
CREATE TABLE IF NOT EXISTS refresh_tokens (
|
||||
token TEXT PRIMARY KEY,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
revoked_at TIMESTAMP,
|
||||
user_id TEXT NOT NULL,
|
||||
expires_at TIMESTAMP NOT NULL,
|
||||
FOREIGN KEY(user_id) REFERENCES users(id)
|
||||
);
|
||||
`
|
||||
_, err = c.db.Exec(refreshTokenTable)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
videoTable := `
|
||||
CREATE TABLE IF NOT EXISTS videos (
|
||||
id TEXT PRIMARY KEY,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
title TEXT NOT NULL,
|
||||
description TEXT,
|
||||
thumbnail_url TEXT,
|
||||
video_url TEXT TEXT,
|
||||
user_id INTEGER,
|
||||
FOREIGN KEY(user_id) REFERENCES users(id)
|
||||
);
|
||||
`
|
||||
_, err = c.db.Exec(videoTable)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c Client) Reset() error {
|
||||
if _, err := c.db.Exec("DELETE FROM refresh_tokens"); err != nil {
|
||||
return fmt.Errorf("failed to reset table refresh_tokens: %w", err)
|
||||
}
|
||||
if _, err := c.db.Exec("DELETE FROM users"); err != nil {
|
||||
return fmt.Errorf("failed to reset table users: %w", err)
|
||||
}
|
||||
if _, err := c.db.Exec("DELETE FROM videos"); err != nil {
|
||||
return fmt.Errorf("failed to reset table videos: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user