Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@ necore
.env
.env.*
!.env.example

.idea/
16 changes: 16 additions & 0 deletions controller/router/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,20 @@ func SetupRoutes() {
botGroup.Delete("/token/:id", middleware.AuthNeeded(), service.DeleteBotToken)
botGroup.Get("/status", middleware.AuthNeeded(), service.GetWSStatus)
botGroup.Delete("/ws/kick/:session_id", middleware.AuthNeeded(), service.KickConnection)

wikiGroup := (*router).Group("/wiki")
wikiGroup.Get("/glossary", service.GetGlossaryList)
wikiGroup.Get("/glossary/:id", service.GetGlossaryById)
wikiGroup.Get("/item", service.GetItemList)
wikiGroup.Get("/item/:id", service.GetItemById)

wikiGroup.Post("/glossary", middleware.AuthNeeded(), service.CreateGlossary)
wikiGroup.Patch("/glossary/:id", middleware.AuthNeeded(), service.UpdateGlossary)
wikiGroup.Delete("/glossary/:id", middleware.AuthNeeded(), service.DeleteGlossary)
wikiGroup.Post("/item", middleware.AuthNeeded(), service.CreateItem)
wikiGroup.Patch("/item/:id", middleware.AuthNeeded(), service.UpdateItem)
wikiGroup.Delete("/item/:id", middleware.AuthNeeded(), service.DeleteItem)

wikiGroup.Post("/upload/:id", middleware.AuthNeeded(), service.UploadWikiFile)
wikiGroup.Delete("/upload/:id", middleware.AuthNeeded(), service.DeleteWikiFile)
}
61 changes: 61 additions & 0 deletions dao/glossary.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package dao

import (
"fmt"
"necore/database"
"necore/model"
)

func GetGlossaryList() ([]model.Glossary, error) {
db := database.GetWikiDatabase()
var list []model.Glossary
err := db.Find(&list).Error
return list, err
}

func GetGlossaryById(id string) (model.Glossary, error) {
db := database.GetWikiDatabase()
var entry model.Glossary
err := db.Where("id = ?", id).First(&entry).Error
return entry, err
}

func CreateGlossary(entry model.Glossary) error {
db := database.GetWikiDatabase()
return db.Create(&entry).Error
}

func UpdateGlossary(entry model.Glossary) error {
result := database.GetWikiDatabase().
Model(&model.Glossary{}).
Where("id = ?", entry.Id).
Updates(map[string]any{
"name": entry.Name,
"type": entry.Type,
"gallery": entry.Gallery,
"content": entry.Content,
})

if result.Error != nil {
return result.Error
}
if result.RowsAffected == 0 {
return fmt.Errorf("glossary not found")
}
return nil
}

func DeleteGlossary(id string) error {
result := database.GetWikiDatabase().
Unscoped().
Where("id = ?", id).
Delete(&model.Glossary{})

if result.Error != nil {
return result.Error
}
if result.RowsAffected == 0 {
return fmt.Errorf("glossary not found")
}
return nil
}
63 changes: 63 additions & 0 deletions dao/item.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package dao

import (
"fmt"
"necore/database"
"necore/model"
)

func GetItemList() ([]model.Item, error) {
db := database.GetWikiDatabase()
var list []model.Item
err := db.Find(&list).Error
return list, err
}

func GetItemById(id string) (model.Item, error) {
db := database.GetWikiDatabase()
var entry model.Item
err := db.Where("id = ?", id).First(&entry).Error
return entry, err
}

func CreateItem(entry model.Item) error {
db := database.GetWikiDatabase()
return db.Create(&entry).Error
}

func UpdateItem(entry model.Item) error {
result := database.GetWikiDatabase().
Model(&model.Item{}).
Where("id = ?", entry.Id).
Updates(map[string]any{
"name": entry.Name,
"type": entry.Type,
"image": entry.Image,
"max_stack": entry.MaxStack,
"recipe": entry.Recipe,
"content": entry.Content,
})

if result.Error != nil {
return result.Error
}
if result.RowsAffected == 0 {
return fmt.Errorf("item not found")
}
return nil
}

func DeleteItem(id string) error {
result := database.GetWikiDatabase().
Unscoped().
Where("id = ?", id).
Delete(&model.Item{})

if result.Error != nil {
return result.Error
}
if result.RowsAffected == 0 {
return fmt.Errorf("item not found")
}
return nil
}
12 changes: 12 additions & 0 deletions database/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ var documentDatabase *gorm.DB

var botTokenDatabase *gorm.DB

var wikiDatabase *gorm.DB

func ConnectSqlite() {
var err error
userDatabase, err = gorm.Open(sqlite.Open("data/user.sqlite3"), &gorm.Config{})
Expand Down Expand Up @@ -50,6 +52,12 @@ func ConnectSqlite() {
panic("failed to connect bot connection database")
}
botTokenDatabase.AutoMigrate(&model.BotToken{})

wikiDatabase, err = gorm.Open(sqlite.Open("data/wiki.sqlite3"), &gorm.Config{})
if err != nil {
panic("failed to connect wiki database")
}
wikiDatabase.AutoMigrate(&model.Glossary{}, &model.Item{})
}

func GetUserDatabase() *gorm.DB {
Expand All @@ -71,3 +79,7 @@ func GetDocumentDatabase() *gorm.DB {
func GetBotTokenDatabase() *gorm.DB {
return botTokenDatabase
}

func GetWikiDatabase() *gorm.DB {
return wikiDatabase
}
13 changes: 13 additions & 0 deletions model/glossary.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package model

import "gorm.io/gorm"

type Glossary struct {
gorm.Model

Id string `gorm:"uniqueIndex;not null" json:"id"`
Name string `gorm:"not null" json:"name"`
Type string `json:"type"`
Gallery string `json:"gallery"`
Content string `json:"content"`
}
15 changes: 15 additions & 0 deletions model/item.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package model

import "gorm.io/gorm"

type Item struct {
gorm.Model

Id string `gorm:"uniqueIndex;not null" json:"id"`
Name string `gorm:"not null" json:"name"`
Type string `json:"type"`
Image string `json:"image"`
MaxStack int `json:"maxStack"`
Recipe string `json:"recipe"`
Content string `json:"content"`
}
Loading
Loading