Add: simple get tags and create tag

This commit is contained in:
2021-12-12 03:23:21 +08:00
parent b96daa07c6
commit 1bbcecfb2e
9 changed files with 360 additions and 8 deletions

View File

@@ -0,0 +1,40 @@
package database
func (database *Database) InsertTag(tag string, description string) (*Tag, error) {
result, err := database.stmt.insertTag.Exec(tag, description)
if err != nil {
return nil, err
}
id, err := result.LastInsertId()
if err != nil {
return nil, err
}
return database.GetTag(id)
}
func (database *Database) GetTag(id int64) (*Tag, error) {
tag := &Tag{}
err := database.stmt.getTag.QueryRow(id).Scan(&tag.ID, &tag.Name, &tag.Description)
if err != nil {
return nil, err
}
return tag, nil
}
func (database *Database) GetTags() ([]Tag, error) {
tags := []Tag{}
rows, err := database.stmt.getTags.Query()
if err != nil {
return nil, err
}
defer rows.Close()
for rows.Next() {
tag := Tag{}
err := rows.Scan(&tag.ID, &tag.Name, &tag.Description)
if err != nil {
return nil, err
}
tags = append(tags, tag)
}
return tags, nil
}

View File

@@ -43,8 +43,9 @@ var initAvatarsTableQuery = `CREATE TABLE IF NOT EXISTS avatars (
);`
var initTagsTableQuery = `CREATE TABLE IF NOT EXISTS tags (
id INTEGER PRIMARY KEY,
tag TEXT NOT NULL
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
description TEXT NOT NULL
);`
var initFileHasTagTableQuery = `CREATE TABLE IF NOT EXISTS file_has_tag (
@@ -169,6 +170,12 @@ var getUserByIdQuery = `SELECT id, username, role, avatar_id FROM users WHERE id
var getAnonymousUserQuery = `SELECT id, username, role, avatar_id FROM users WHERE role = 0 LIMIT 1;`
var insertTagQuery = `INSERT INTO tags (name, description) VALUES (?, ?);`
var getTagQuery = `SELECT id, name, description FROM tags WHERE id = ? LIMIT 1;`
var getTagsQuery = `SELECT id, name, description FROM tags;`
type Stmt struct {
initFilesTable *sql.Stmt
initFoldersTable *sql.Stmt
@@ -201,6 +208,9 @@ type Stmt struct {
getUser *sql.Stmt
getUserById *sql.Stmt
getAnonymousUser *sql.Stmt
insertTag *sql.Stmt
getTag *sql.Stmt
getTags *sql.Stmt
}
func NewPreparedStatement(sqlConn *sql.DB) (*Stmt, error) {
@@ -457,5 +467,23 @@ func NewPreparedStatement(sqlConn *sql.DB) (*Stmt, error) {
}
}
// init insertTag
stmt.insertTag, err = sqlConn.Prepare(insertTagQuery)
if err != nil {
return nil, err
}
// init getTag
stmt.getTag, err = sqlConn.Prepare(getTagQuery)
if err != nil {
return nil, err
}
// init getTags
stmt.getTags, err = sqlConn.Prepare(getTagsQuery)
if err != nil {
return nil, err
}
return stmt, err
}

View File

@@ -28,10 +28,16 @@ type User struct {
AvatarId int64 `json:"avatar_id"`
}
type Tag struct {
ID int64 `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
}
var (
RoleAnonymous = int64(0)
RoleAdmin = int64(1)
RoleUser = int64(2)
RoleAdmin = int64(1)
RoleUser = int64(2)
)
func (f *File) Path() (string, error) {