mirror of
https://github.com/go-shiori/shiori.git
synced 2025-02-22 23:14:02 +08:00
Initial database
This commit is contained in:
parent
0bddceeb36
commit
f24fc48bbc
2 changed files with 81 additions and 0 deletions
73
database.go
Normal file
73
database.go
Normal file
|
@ -0,0 +1,73 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/jmoiron/sqlx"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
"log"
|
||||
)
|
||||
|
||||
func openDatabase() (db *sqlx.DB, err error) {
|
||||
// Open database and start transaction
|
||||
db = sqlx.MustConnect("sqlite3", "shiori.db")
|
||||
tx := db.MustBegin()
|
||||
|
||||
// Make sure to rollback if panic ever happened
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
panicErr, _ := r.(error)
|
||||
log.Println("Database error:", panicErr)
|
||||
tx.Rollback()
|
||||
|
||||
db = nil
|
||||
err = panicErr
|
||||
}
|
||||
}()
|
||||
|
||||
_, err = tx.Exec(`CREATE TABLE IF NOT EXISTS account(
|
||||
id INTEGER NOT NULL,
|
||||
username TEXT NOT NULL,
|
||||
password TEXT NOT NULL,
|
||||
CONSTRAINT account_PK PRIMARY KEY(id),
|
||||
CONSTRAINT account_username_UNIQUE UNIQUE(username))`)
|
||||
checkError(err)
|
||||
|
||||
_, err = tx.Exec(`CREATE TABLE IF NOT EXISTS bookmark(
|
||||
id INTEGER NOT NULL,
|
||||
account_id INTEGER DEFAULT NULL,
|
||||
url TEXT NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
image_url TEXT NOT NULL DEFAULT "",
|
||||
excerpt TEXT NOT NULL DEFAULT "",
|
||||
author TEXT NOT NULL DEFAULT "",
|
||||
language TEXT NOT NULL DEFAULT "",
|
||||
min_read_time INTEGER NOT NULL DEFAULT 0,
|
||||
max_read_time INTEGER NOT NULL DEFAULT 0,
|
||||
modified TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT bookmark_PK PRIMARY KEY(id),
|
||||
CONSTRAINT bookmark_url_UNIQUE UNIQUE(url),
|
||||
CONSTRAINT bookmark_account_id_FK FOREIGN KEY(account_id) REFERENCES account(id))`)
|
||||
checkError(err)
|
||||
|
||||
_, err = tx.Exec(`CREATE TABLE IF NOT EXISTS tag(
|
||||
id INTEGER NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
CONSTRAINT tag_PK PRIMARY KEY(id),
|
||||
CONSTRAINT tag_name_UNIQUE UNIQUE(name))`)
|
||||
checkError(err)
|
||||
|
||||
_, err = tx.Exec(`CREATE TABLE IF NOT EXISTS bookmark_tag(
|
||||
bookmark_id INTEGER NOT NULL,
|
||||
tag_id INTEGER NOT NULL,
|
||||
CONSTRAINT bookmark_tag_PK PRIMARY KEY(bookmark_id, tag_id),
|
||||
CONSTRAINT bookmark_id_FK FOREIGN KEY(bookmark_id) REFERENCES bookmark(id),
|
||||
CONSTRAINT tag_id_FK FOREIGN KEY(tag_id) REFERENCES tag(id))`)
|
||||
checkError(err)
|
||||
|
||||
_, err = tx.Exec(`CREATE VIRTUAL TABLE IF NOT EXISTS bookmark_content USING fts4(title, content)`)
|
||||
checkError(err)
|
||||
|
||||
err = tx.Commit()
|
||||
checkError(err)
|
||||
|
||||
return db, err
|
||||
}
|
8
main.go
8
main.go
|
@ -4,4 +4,12 @@ import "fmt"
|
|||
|
||||
func main() {
|
||||
fmt.Println("Hello world")
|
||||
_, err := openDatabase()
|
||||
checkError(err)
|
||||
}
|
||||
|
||||
func checkError(err error) {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue