diff --git a/example/main.go b/example/main.go
deleted file mode 100644
index 47c2182..0000000
--- a/example/main.go
+++ /dev/null
@@ -1,190 +0,0 @@
-package main
-
-import (
- "errors"
- "fmt"
- "sync"
- "time"
-)
-
-const (
- // 位数分配 (Bit Allocation)
- timestampBits uint8 = 41
- businessIDBits uint8 = 3
- workerIDBits uint8 = 10
- sequenceBits uint8 = 9 // 64 - 1 (sign) - 41 (timestamp) - 3 (business) - 10 (worker) = 9
-
- // 最大值 (Max Values)
- maxBusinessID int64 = -1 ^ (-1 << businessIDBits) // 2^3 - 1 = 7
- maxWorkerID int64 = -1 ^ (-1 << workerIDBits) // 2^10 - 1 = 1023
- maxSequence int64 = -1 ^ (-1 << sequenceBits) // 2^9 - 1 = 511
-
- // 位移量 (Bit Shifts)
- workerIDShift = sequenceBits // 9
- businessIDShift = sequenceBits + workerIDBits // 9 + 10 = 19
- timestampShift = sequenceBits + workerIDBits + businessIDBits // 9 + 10 + 3 = 22
-
- // 自定义纪元 (Epoch), 单位毫秒. (可以设置为项目上线的日期)
- // 例如: 2025-01-01 00:00:00 UTC
- customEpoch int64 = 1735689600000 // time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC).UnixMilli()
-)
-
-// ErrClockMovedBackwards indicates that the system clock moved backwards.
-var ErrClockMovedBackwards = errors.New("clock moved backwards, refusing to generate id")
-
-// ErrInvalidBusinessID indicates the business ID is out of range.
-var ErrInvalidBusinessID = fmt.Errorf("business ID must be between 0 and %d", maxBusinessID)
-
-// ErrInvalidWorkerID indicates the worker ID is out of range.
-var ErrInvalidWorkerID = fmt.Errorf("worker ID must be between 0 and %d", maxWorkerID)
-
-// Generator is the core ID generator structure.
-type Generator struct {
- mu sync.Mutex
- lastTimestamp int64
- workerID int64
- businessID int64
- sequence int64
-}
-
-// NewGenerator creates a new ID generator instance.
-func NewGenerator(workerID, businessID int64) (*Generator, error) {
- if workerID < 0 || workerID > maxWorkerID {
- return nil, ErrInvalidWorkerID
- }
- if businessID < 0 || businessID > maxBusinessID {
- return nil, ErrInvalidBusinessID
- }
-
- return &Generator{
- workerID: workerID,
- businessID: businessID,
- }, nil
-}
-
-// currentTimeMillis returns the current time in milliseconds since the custom epoch.
-func currentTimeMillis() int64 {
- return time.Now().UnixMilli() - customEpoch
-}
-
-// tilNextMillis waits until the next millisecond.
-func tilNextMillis(lastTimestamp int64) int64 {
- timestamp := currentTimeMillis()
- for timestamp <= lastTimestamp {
- // Spin wait is generally discouraged, but for millisecond precision,
- // time.Sleep(1 * time.Millisecond) might overshoot too much.
- // A brief sleep can reduce CPU churn if clock skew is minor.
- time.Sleep(time.Microsecond * 100) // Sleep briefly
- timestamp = currentTimeMillis()
- }
- return timestamp
-}
-
-// NextID generates the next unique ID.
-func (g *Generator) NextID() (int64, error) {
- g.mu.Lock()
- defer g.mu.Unlock()
-
- timestamp := currentTimeMillis()
-
- // 时钟回拨检查 (Clock moved backwards check)
- if timestamp < g.lastTimestamp {
- // 可以选择:
- // 1. 返回错误 (Recommended for safety)
- return 0, fmt.Errorf("%w: current: %d, last: %d", ErrClockMovedBackwards, timestamp, g.lastTimestamp)
- // 2. 等待时钟追上 (Potentially blocks, less safe if clock jump is large)
- // timestamp = tilNextMillis(g.lastTimestamp)
- }
-
- // 同一毫秒内 (Within the same millisecond)
- if timestamp == g.lastTimestamp {
- g.sequence = (g.sequence + 1) & maxSequence
- // 序列号溢出,等待下一毫秒 (Sequence overflow, wait for next millisecond)
- if g.sequence == 0 {
- timestamp = tilNextMillis(g.lastTimestamp)
- // 等待后重置序列号 (Reset sequence after waiting)
- // g.sequence = 0 // Reset is implicit as it overflowed to 0
- }
- } else {
- // 新的毫秒,重置序列号 (New millisecond, reset sequence)
- g.sequence = 0
- }
-
- // 更新最后时间戳 (Update last timestamp)
- g.lastTimestamp = timestamp
-
- // 组合 ID (Assemble the ID)
- id := (timestamp << timestampShift) | // 时间戳左移
- (g.businessID << businessIDShift) | // 业务ID左移
- (g.workerID << workerIDShift) | // Worker ID左移
- g.sequence // 序列号
-
- return id, nil
-}
-
-// ParseID decomposes an ID into its components. Useful for debugging or analysis.
-func ParseID(id int64) (timestampMsSinceEpoch int64, businessID int64, workerID int64, sequence int64, genTimeUTC time.Time) {
- timestampMsSinceEpoch = (id >> timestampShift) & (int64(-1) ^ (int64(-1) << timestampBits))
- businessID = (id >> businessIDShift) & maxBusinessID
- workerID = (id >> workerIDShift) & maxWorkerID
- sequence = id & maxSequence
-
- // Calculate generation time in UTC
- genTimeUTC = time.UnixMilli(timestampMsSinceEpoch + customEpoch).UTC()
-
- return
-}
-
-func main() {
- // !!! IMPORTANT: Worker ID and Business ID MUST be unique per instance/purpose !!!
- // These should typically come from configuration.
- workerID := int64(1) // Example: Get from config/env
- businessIDOrder := int64(1) // Example: 1 for Order
- businessIDPayment := int64(2) // Example: 2 for Payment
-
- // Create generators for different business types
- orderGenerator, err := NewGenerator(workerID, businessIDOrder)
- if err != nil {
- panic(err)
- }
-
- paymentGenerator, err := NewGenerator(workerID, businessIDPayment)
- if err != nil {
- panic(err)
- }
-
- // Generate some IDs
- for i := 0; i < 5; i++ {
- orderID, err := orderGenerator.NextID()
- if err != nil {
- fmt.Println("Error generating order ID:", err)
- time.Sleep(1 * time.Millisecond) // Wait before retry on clock issues
- continue
- }
- fmt.Printf("Generated Order ID: %d\n", orderID)
- // You can optionally add a human-readable prefix when displaying/logging
- fmt.Printf(" Readable Order ID: ORD-%d\n", orderID)
-
- // Parse it back (for demonstration)
- ts, biz, wkr, seq, genTime := ParseID(orderID)
- fmt.Printf(" Parsed: Timestamp=%d, Business=%d, Worker=%d, Sequence=%d, GenTime=%s\n", ts, biz, wkr, seq, genTime.Format(time.RFC3339Nano))
-
- paymentID, err := paymentGenerator.NextID()
- if err != nil {
- fmt.Println("Error generating payment ID:", err)
- continue
- }
- fmt.Printf("Generated Payment ID: %d\n", paymentID)
- fmt.Printf(" Readable Payment ID: PAY-%d\n", paymentID)
-
- tsP, bizP, wkrP, seqP, genTimeP := ParseID(paymentID)
- fmt.Printf(" Parsed: Timestamp=%d, Business=%d, Worker=%d, Sequence=%d, GenTime=%s\n\n", tsP, bizP, wkrP, seqP, genTimeP.Format(time.RFC3339Nano))
-
- time.Sleep(5 * time.Millisecond) // Simulate time passing
- }
-
- // Example of how to get shard key (assuming 64 shards)
- orderIDForSharding, _ := orderGenerator.NextID()
- shardIndex := orderIDForSharding % 64
- fmt.Printf("\nOrder ID %d would route to Shard Index %d\n", orderIDForSharding, shardIndex)
-}
diff --git a/internal/db/init/category.go b/internal/db/init/category.go
deleted file mode 100644
index 0b3e49a..0000000
--- a/internal/db/init/category.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package db
-
-import (
- "context"
-
- db "management/internal/db/sqlc"
-)
-
-func initCategory() (*db.Category, error) {
- arg := db.CreateCategoryParams{
- Name: "根结点",
- Icon: "",
- Description: "",
- Letter: "",
- ParentID: 0,
- ParentPath: ",0,",
- Status: 0,
- Sort: 6666,
- }
- return db.Engine.CreateCategory(context.Background(), &arg)
-}
diff --git a/internal/db/init/config.go b/internal/db/init/config.go
deleted file mode 100644
index 8e236ea..0000000
--- a/internal/db/init/config.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package db
-
-import (
- "context"
- "encoding/json"
-
- db "management/internal/db/sqlc"
- "management/internal/pkg/know/pearadmin"
-)
-
-func initConfig() error {
- b, err := json.Marshal(pearadmin.PearJson)
- if err != nil {
- return err
- }
-
- arg := db.CreateSysConfigParams{
- Key: pearadmin.PearKey,
- Value: b,
- }
- err = db.Engine.CreateSysConfig(context.Background(), &arg)
- if err != nil {
- return err
- }
-
- return nil
-}
diff --git a/internal/db/init/department.go b/internal/db/init/department.go
deleted file mode 100644
index 3758ec6..0000000
--- a/internal/db/init/department.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package db
-
-import (
- "context"
- "time"
-
- db "management/internal/db/sqlc"
-)
-
-func initDepartment() (*db.SysDepartment, error) {
- arg := db.CreateSysDepartmentParams{
- Name: "公司",
- ParentID: 0,
- ParentPath: ",0,",
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- }
- return db.Engine.CreateSysDepartment(context.Background(), &arg)
-}
diff --git a/internal/db/init/init.go b/internal/db/init/init.go
deleted file mode 100644
index 38f0b39..0000000
--- a/internal/db/init/init.go
+++ /dev/null
@@ -1,92 +0,0 @@
-package db
-
-import (
- "context"
- "log"
-
- db "management/internal/db/sqlc"
- "management/internal/pkg/know/pearadmin"
-)
-
-func InitSeed() {
- ctx := context.Background()
-
- // 后台pear配置
- b, err := db.Engine.ExistsSysConfigByKey(ctx, pearadmin.PearKey)
- if err != nil {
- log.Fatalf("failed to get sys config: %v", err)
- }
- if !b {
- err = initConfig()
- if err != nil {
- log.Fatal("sys config: ", err)
- }
- }
-
- // 部门
- b, err = db.Engine.ExistsSysDepartment(ctx)
- if err != nil {
- log.Fatal("department exists: ", err)
- }
- var depart *db.SysDepartment
- if !b {
- depart, err = initDepartment()
- if err != nil {
- log.Fatal("department: ", err)
- }
- }
-
- // 角色
- b, err = db.Engine.ExistsVipRole(ctx)
- if err != nil {
- log.Fatal("role exists: ", err)
- }
- var role *db.SysRole
- if !b {
- role, err = initRole()
- if err != nil {
- log.Fatal("role: ", err)
- }
- } else {
- role, err = db.Engine.GetFirstVipRole(ctx)
- if err != nil {
- log.Fatal("find role: ", err)
- }
- }
-
- // 用户
- b, err = db.Engine.ExistsSysUser(ctx)
- if err != nil {
- log.Fatal("user exists: ", err)
- }
- if !b {
- _, err = initUser(depart.ID, role.ID)
- if err != nil {
- log.Fatal("user: ", err)
- }
- }
-
- // 类别
- b, err = db.Engine.ExistsCategories(ctx)
- if err != nil {
- log.Fatal("category exists: ", err)
- }
- if !b {
- _, err := initCategory()
- if err != nil {
- log.Fatal("category: ", err)
- }
- }
-
- // 菜单
- b, err = db.Engine.ExistsMenu(ctx)
- if err != nil {
- log.Fatal("menu exists: ", err)
- }
- if !b {
- err = initMenu()
- if err != nil {
- log.Fatal("menu: ", err)
- }
- }
-}
diff --git a/internal/db/init/menu.go b/internal/db/init/menu.go
deleted file mode 100644
index 3e1719e..0000000
--- a/internal/db/init/menu.go
+++ /dev/null
@@ -1,28 +0,0 @@
-package db
-
-import (
- "context"
-
- "management/internal/db/init/menus"
-)
-
-func initMenu() error {
- ctx := context.Background()
-
- err := menus.SystemInit(ctx)
- if err != nil {
- return err
- }
-
- err = menus.ERPInit(ctx)
- if err != nil {
- return err
- }
-
- // err = menus.PaperInit(ctx)
- // if err != nil {
- // return err
- // }
-
- return nil
-}
diff --git a/internal/db/init/menus/erp.go b/internal/db/init/menus/erp.go
deleted file mode 100644
index 001bfa9..0000000
--- a/internal/db/init/menus/erp.go
+++ /dev/null
@@ -1,555 +0,0 @@
-package menus
-
-import (
- "context"
- "fmt"
- "log"
- "time"
-
- db "management/internal/db/sqlc"
-
- "github.com/google/uuid"
-)
-
-func ERPInit(ctx context.Context) error {
- erp, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "ERP管理",
- DisplayName: "ERP管理",
- Url: uuid.Must(uuid.NewRandom()).String(),
- Type: "node",
- ParentID: 0,
- ParentPath: ",0,",
- Avatar: "layui-icon layui-icon-set",
- Style: "",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- pro, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "项目管理",
- DisplayName: "项目管理",
- Url: uuid.Must(uuid.NewRandom()).String(),
- Type: "node",
- ParentID: erp.ID,
- ParentPath: fmt.Sprintf("%s%d,", erp.ParentPath, erp.ID),
- Avatar: "layui-icon layui-icon-vercode",
- Style: "",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- project, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "项目管理",
- DisplayName: "项目管理",
- Url: "/project/list",
- Type: "menu",
- ParentID: pro.ID,
- ParentPath: fmt.Sprintf("%s%d,", pro.ParentPath, pro.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增",
- DisplayName: "新增",
- Url: "/project/add",
- Type: "btn",
- ParentID: project.ID,
- ParentPath: fmt.Sprintf("%s%d,", project.ParentPath, project.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "编辑",
- DisplayName: "编辑",
- Url: "/project/edit",
- Type: "btn",
- ParentID: project.ID,
- ParentPath: fmt.Sprintf("%s%d,", project.ParentPath, project.ID),
- Avatar: "layui-icon layui-icon-edit",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "保存",
- DisplayName: "保存",
- Url: "/project/save",
- Type: "btn",
- ParentID: project.ID,
- ParentPath: fmt.Sprintf("%s%d,", project.ParentPath, project.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "xmselect",
- DisplayName: "xmselect",
- Url: "/project/xmselect",
- Type: "btn",
- ParentID: project.ID,
- ParentPath: fmt.Sprintf("%s%d,", project.ParentPath, project.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- budget, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "项目预算",
- DisplayName: "项目预算",
- Url: "/budget/list",
- Type: "menu",
- ParentID: pro.ID,
- ParentPath: fmt.Sprintf("%s%d,", pro.ParentPath, pro.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增",
- DisplayName: "新增",
- Url: "/budget/add",
- Type: "btn",
- ParentID: budget.ID,
- ParentPath: fmt.Sprintf("%s%d,", budget.ParentPath, budget.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "编辑",
- DisplayName: "编辑",
- Url: "/budget/edit",
- Type: "btn",
- ParentID: budget.ID,
- ParentPath: fmt.Sprintf("%s%d,", budget.ParentPath, budget.ID),
- Avatar: "layui-icon layui-icon-edit",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "保存",
- DisplayName: "保存",
- Url: "/budget/save",
- Type: "btn",
- ParentID: budget.ID,
- ParentPath: fmt.Sprintf("%s%d,", budget.ParentPath, budget.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- projectDashboard, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "项目统计看板",
- DisplayName: "项目统计看板",
- Url: "/project/dashboard",
- Type: "menu",
- ParentID: pro.ID,
- ParentPath: fmt.Sprintf("%s%d,", pro.ParentPath, pro.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
- log.Println(projectDashboard)
-
- in, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "应收管理",
- DisplayName: "应收管理",
- Url: uuid.Must(uuid.NewRandom()).String(),
- Type: "node",
- ParentID: erp.ID,
- ParentPath: fmt.Sprintf("%s%d,", erp.ParentPath, erp.ID),
- Avatar: "layui-icon layui-icon-vercode",
- Style: "",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- customer, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "客户管理",
- DisplayName: "客户管理",
- Url: "/customer/list",
- Type: "menu",
- ParentID: in.ID,
- ParentPath: fmt.Sprintf("%s%d,", in.ParentPath, in.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增",
- DisplayName: "新增",
- Url: "/customer/add",
- Type: "btn",
- ParentID: customer.ID,
- ParentPath: fmt.Sprintf("%s%d,", customer.ParentPath, customer.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "编辑",
- DisplayName: "编辑",
- Url: "/customer/edit",
- Type: "btn",
- ParentID: customer.ID,
- ParentPath: fmt.Sprintf("%s%d,", customer.ParentPath, customer.ID),
- Avatar: "layui-icon layui-icon-edit",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "保存",
- DisplayName: "保存",
- Url: "/customer/save",
- Type: "btn",
- ParentID: customer.ID,
- ParentPath: fmt.Sprintf("%s%d,", customer.ParentPath, customer.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "xmselect",
- DisplayName: "xmselect",
- Url: "/customer/xmselect",
- Type: "btn",
- ParentID: customer.ID,
- ParentPath: fmt.Sprintf("%s%d,", customer.ParentPath, customer.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- income, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "回款单",
- DisplayName: "回款单",
- Url: "/income/list",
- Type: "menu",
- ParentID: in.ID,
- ParentPath: fmt.Sprintf("%s%d,", in.ParentPath, in.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增",
- DisplayName: "新增",
- Url: "/income/add",
- Type: "btn",
- ParentID: income.ID,
- ParentPath: fmt.Sprintf("%s%d,", income.ParentPath, income.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "编辑",
- DisplayName: "编辑",
- Url: "/income/edit",
- Type: "btn",
- ParentID: income.ID,
- ParentPath: fmt.Sprintf("%s%d,", income.ParentPath, income.ID),
- Avatar: "layui-icon layui-icon-edit",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "保存",
- DisplayName: "保存",
- Url: "/income/save",
- Type: "btn",
- ParentID: income.ID,
- ParentPath: fmt.Sprintf("%s%d,", income.ParentPath, income.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- cost, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "费用管理",
- DisplayName: "费用管理",
- Url: uuid.Must(uuid.NewRandom()).String(),
- Type: "node",
- ParentID: erp.ID,
- ParentPath: fmt.Sprintf("%s%d,", erp.ParentPath, erp.ID),
- Avatar: "layui-icon layui-icon-vercode",
- Style: "",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- expense, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "费用报销单",
- DisplayName: "费用报销单",
- Url: "/expense/list",
- Type: "menu",
- ParentID: cost.ID,
- ParentPath: fmt.Sprintf("%s%d,", cost.ParentPath, cost.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增",
- DisplayName: "新增",
- Url: "/expense/add",
- Type: "btn",
- ParentID: expense.ID,
- ParentPath: fmt.Sprintf("%s%d,", expense.ParentPath, expense.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "编辑",
- DisplayName: "编辑",
- Url: "/expense/edit",
- Type: "btn",
- ParentID: expense.ID,
- ParentPath: fmt.Sprintf("%s%d,", expense.ParentPath, expense.ID),
- Avatar: "layui-icon layui-icon-edit",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "保存",
- DisplayName: "保存",
- Url: "/expense/save",
- Type: "btn",
- ParentID: expense.ID,
- ParentPath: fmt.Sprintf("%s%d,", expense.ParentPath, expense.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- return nil
-}
diff --git a/internal/db/init/menus/system.go b/internal/db/init/menus/system.go
deleted file mode 100644
index 07393ae..0000000
--- a/internal/db/init/menus/system.go
+++ /dev/null
@@ -1,1042 +0,0 @@
-package menus
-
-import (
- "context"
- "fmt"
- "time"
-
- db "management/internal/db/sqlc"
-
- "github.com/google/uuid"
-)
-
-func SystemInit(ctx context.Context) error {
- system, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "系统管理",
- DisplayName: "系统管理",
- Url: uuid.Must(uuid.NewRandom()).String(),
- Type: "node",
- ParentID: 0,
- ParentPath: ",0,",
- Avatar: "layui-icon layui-icon-set",
- Style: "",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- accountPermission, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "账户权限",
- DisplayName: "账户权限",
- Url: uuid.Must(uuid.NewRandom()).String(),
- Type: "node",
- ParentID: system.ID,
- ParentPath: fmt.Sprintf("%s%d,", system.ParentPath, system.ID),
- Avatar: "layui-icon layui-icon-vercode",
- Style: "",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- systemMenu, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "菜单管理",
- DisplayName: "菜单管理",
- Url: "/system/menu/list",
- Type: "menu",
- ParentID: accountPermission.ID,
- ParentPath: fmt.Sprintf("%s%d,", accountPermission.ParentPath, accountPermission.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- systemRole, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "角色管理",
- DisplayName: "角色管理",
- Url: "/system/role/list",
- Type: "menu",
- ParentID: accountPermission.ID,
- ParentPath: fmt.Sprintf("%s%d,", accountPermission.ParentPath, accountPermission.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- systemDepartment, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "部门管理",
- DisplayName: "部门管理",
- Url: "/system/department/list",
- Type: "menu",
- ParentID: accountPermission.ID,
- ParentPath: fmt.Sprintf("%s%d,", accountPermission.ParentPath, accountPermission.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- systemUser, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "用户管理",
- DisplayName: "用户管理",
- Url: "/system/user/list",
- Type: "menu",
- ParentID: accountPermission.ID,
- ParentPath: fmt.Sprintf("%s%d,", accountPermission.ParentPath, accountPermission.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "登陆日志",
- DisplayName: "登陆日志",
- Url: "/system/login_log/list",
- Type: "menu",
- ParentID: accountPermission.ID,
- ParentPath: fmt.Sprintf("%s%d,", accountPermission.ParentPath, accountPermission.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "审计日志",
- DisplayName: "审计日志",
- Url: "/system/audit_log/list",
- Type: "menu",
- ParentID: accountPermission.ID,
- ParentPath: fmt.Sprintf("%s%d,", accountPermission.ParentPath, accountPermission.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- // 菜单
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增",
- DisplayName: "新增",
- Url: "/system/menu/add",
- Type: "btn",
- ParentID: systemMenu.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemMenu.ParentPath, systemMenu.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增子菜单",
- DisplayName: "新增子菜单",
- Url: "/system/menu/add_children",
- Type: "btn",
- ParentID: systemMenu.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemMenu.ParentPath, systemMenu.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "编辑",
- DisplayName: "编辑",
- Url: "/system/menu/edit",
- Type: "btn",
- ParentID: systemMenu.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemMenu.ParentPath, systemMenu.ID),
- Avatar: "layui-icon layui-icon-edit",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "保存",
- DisplayName: "保存",
- Url: "/system/menu/save",
- Type: "btn",
- ParentID: systemMenu.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemMenu.ParentPath, systemMenu.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "刷新",
- DisplayName: "刷新",
- Url: "/system/menu/refresh_cache",
- Type: "btn",
- ParentID: systemMenu.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemMenu.ParentPath, systemMenu.ID),
- Avatar: "layui-icon layui-icon-refresh",
- Style: "pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "菜单树",
- DisplayName: "菜单树",
- Url: "/system/menu/tree",
- Type: "btn",
- ParentID: systemMenu.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemMenu.ParentPath, systemMenu.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "菜单树xm",
- DisplayName: "菜单树xm",
- Url: "/system/menu/xm_select_tree",
- Type: "btn",
- ParentID: systemMenu.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemMenu.ParentPath, systemMenu.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- // 角色
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增",
- DisplayName: "新增",
- Url: "/system/role/add",
- Type: "btn",
- ParentID: systemRole.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemRole.ParentPath, systemRole.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "编辑",
- DisplayName: "编辑",
- Url: "/system/role/edit",
- Type: "btn",
- ParentID: systemRole.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemRole.ParentPath, systemRole.ID),
- Avatar: "layui-icon layui-icon-edit",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "保存",
- DisplayName: "保存",
- Url: "/system/role/save",
- Type: "btn",
- ParentID: systemRole.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemRole.ParentPath, systemRole.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "dtree",
- DisplayName: "dtree",
- Url: "/system/role/dtree",
- Type: "btn",
- ParentID: systemRole.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemRole.ParentPath, systemRole.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "刷新",
- DisplayName: "刷新",
- Url: "/system/role/refresh",
- Type: "btn",
- ParentID: systemRole.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemRole.ParentPath, systemRole.ID),
- Avatar: "layui-icon layui-icon-refresh",
- Style: "pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "重建父路径",
- DisplayName: "重建父路径",
- Url: "/system/role/rebuild_parent_path",
- Type: "btn",
- ParentID: systemRole.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemRole.ParentPath, systemRole.ID),
- Avatar: "layui-icon layui-icon-refresh",
- Style: "pear-btn-danger pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "权限刷新",
- DisplayName: "权限刷新",
- Url: "/system/role/refresh_role_menus",
- Type: "btn",
- ParentID: systemRole.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemRole.ParentPath, systemRole.ID),
- Avatar: "layui-icon layui-icon-refresh",
- Style: "pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "设置权限",
- DisplayName: "设置权限",
- Url: "/system/role/set_menu",
- Type: "btn",
- ParentID: systemRole.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemRole.ParentPath, systemRole.ID),
- Avatar: "layui-icon layui-icon-set",
- Style: "pear-btn-danger pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- // 部门
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增",
- DisplayName: "新增",
- Url: "/system/department/add",
- Type: "btn",
- ParentID: systemDepartment.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemDepartment.ParentPath, systemDepartment.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增子部门",
- DisplayName: "新增子部门",
- Url: "/system/department/add_children",
- Type: "btn",
- ParentID: systemDepartment.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemDepartment.ParentPath, systemDepartment.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "编辑",
- DisplayName: "编辑",
- Url: "/system/department/edit",
- Type: "btn",
- ParentID: systemDepartment.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemDepartment.ParentPath, systemDepartment.ID),
- Avatar: "layui-icon layui-icon-edit",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "保存",
- DisplayName: "保存",
- Url: "/system/department/save",
- Type: "btn",
- ParentID: systemDepartment.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemDepartment.ParentPath, systemDepartment.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "dtree",
- DisplayName: "dtree",
- Url: "/system/department/dtree",
- Type: "btn",
- ParentID: systemDepartment.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemDepartment.ParentPath, systemDepartment.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "刷新",
- DisplayName: "刷新",
- Url: "/system/department/refresh",
- Type: "btn",
- ParentID: systemDepartment.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemDepartment.ParentPath, systemDepartment.ID),
- Avatar: "layui-icon layui-icon-refresh",
- Style: "pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "重建父路径",
- DisplayName: "重建父路径",
- Url: "/system/department/rebuild_parent_path",
- Type: "btn",
- ParentID: systemDepartment.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemDepartment.ParentPath, systemDepartment.ID),
- Avatar: "layui-icon layui-icon-refresh",
- Style: "pear-btn-danger pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- // 用户
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增",
- DisplayName: "新增",
- Url: "/system/user/add",
- Type: "btn",
- ParentID: systemUser.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemUser.ParentPath, systemUser.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "编辑",
- DisplayName: "编辑",
- Url: "/system/user/edit",
- Type: "btn",
- ParentID: systemUser.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemUser.ParentPath, systemUser.ID),
- Avatar: "layui-icon layui-icon-edit",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "基本资料",
- DisplayName: "基本资料",
- Url: "/system/user/profile",
- Type: "btn",
- ParentID: systemUser.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemUser.ParentPath, systemUser.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "保存",
- DisplayName: "保存",
- Url: "/system/user/save",
- Type: "btn",
- ParentID: systemUser.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemUser.ParentPath, systemUser.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "xmselect",
- DisplayName: "xmselect",
- Url: "/system/user/xmselect",
- Type: "btn",
- ParentID: systemUser.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemUser.ParentPath, systemUser.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- // 基础数据
- basicData, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "基础数据",
- DisplayName: "基础数据",
- Url: uuid.Must(uuid.NewRandom()).String(),
- Type: "node",
- ParentID: system.ID,
- ParentPath: fmt.Sprintf("%s%d,", system.ParentPath, system.ID),
- Avatar: "layui-icon layui-icon-vercode",
- Style: "",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- // 系统配置
- systemConfig, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "系统属性",
- DisplayName: "系统属性",
- Url: "/system/config/list",
- Type: "menu",
- ParentID: basicData.ID,
- ParentPath: fmt.Sprintf("%s%d,", basicData.ParentPath, basicData.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增",
- DisplayName: "新增",
- Url: "/system/config/add",
- Type: "btn",
- ParentID: systemConfig.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemConfig.ParentPath, systemConfig.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "编辑",
- DisplayName: "编辑",
- Url: "/system/config/edit",
- Type: "btn",
- ParentID: systemConfig.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemConfig.ParentPath, systemConfig.ID),
- Avatar: "layui-icon layui-icon-edit",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "保存",
- DisplayName: "保存",
- Url: "/system/config/save",
- Type: "btn",
- ParentID: systemConfig.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemConfig.ParentPath, systemConfig.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "重置Pear",
- DisplayName: "重置Pear",
- Url: "/system/config/reset_pear",
- Type: "btn",
- ParentID: systemConfig.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemConfig.ParentPath, systemConfig.ID),
- Avatar: "layui-icon layui-icon-refresh",
- Style: "pear-btn-danger pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "刷新",
- DisplayName: "刷新",
- Url: "/system/config/refresh",
- Type: "btn",
- ParentID: systemConfig.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemConfig.ParentPath, systemConfig.ID),
- Avatar: "layui-icon layui-icon-refresh",
- Style: "pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- // 类别
- systemClass, err := db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "类别配置",
- DisplayName: "类别配置",
- Url: "/system/category/list",
- Type: "menu",
- ParentID: basicData.ID,
- ParentPath: fmt.Sprintf("%s%d,", basicData.ParentPath, basicData.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: true,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增",
- DisplayName: "新增",
- Url: "/system/category/add",
- Type: "btn",
- ParentID: systemClass.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemClass.ParentPath, systemClass.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "新增子栏目",
- DisplayName: "新增子栏目",
- Url: "/system/category/add_children",
- Type: "btn",
- ParentID: systemClass.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemClass.ParentPath, systemClass.ID),
- Avatar: "layui-icon layui-icon-add-1",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "编辑",
- DisplayName: "编辑",
- Url: "/system/category/edit",
- Type: "btn",
- ParentID: systemClass.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemClass.ParentPath, systemClass.ID),
- Avatar: "layui-icon layui-icon-edit",
- Style: "pear-btn-primary pear-btn-xs",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "保存",
- DisplayName: "保存",
- Url: "/system/category/save",
- Type: "btn",
- ParentID: systemClass.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemClass.ParentPath, systemClass.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "dtree",
- DisplayName: "dtree",
- Url: "/system/category/dtree",
- Type: "btn",
- ParentID: systemClass.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemClass.ParentPath, systemClass.ID),
- Avatar: "",
- Style: "",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "xmselect",
- DisplayName: "xmselect",
- Url: "/system/category/xmselect",
- Type: "btn",
- ParentID: systemClass.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemClass.ParentPath, systemClass.ID),
- Avatar: "layui-icon layui-icon-ok",
- Style: "pear-btn-primary pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "刷新",
- DisplayName: "刷新",
- Url: "/system/category/refresh",
- Type: "btn",
- ParentID: systemClass.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemClass.ParentPath, systemClass.ID),
- Avatar: "layui-icon layui-icon-refresh",
- Style: "pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- _, err = db.Engine.CreateSysMenu(ctx, &db.CreateSysMenuParams{
- Name: "重建父路径",
- DisplayName: "重建父路径",
- Url: "/system/category/rebuild_parent_path",
- Type: "btn",
- ParentID: systemClass.ID,
- ParentPath: fmt.Sprintf("%s%d,", systemClass.ParentPath, systemClass.ID),
- Avatar: "layui-icon layui-icon-refresh",
- Style: "pear-btn-danger pear-btn-sm",
- Visible: true,
- IsList: false,
- Status: 0,
- Sort: 6666,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- })
- if err != nil {
- return err
- }
-
- return nil
-}
diff --git a/internal/db/init/role.go b/internal/db/init/role.go
deleted file mode 100644
index 15aa017..0000000
--- a/internal/db/init/role.go
+++ /dev/null
@@ -1,38 +0,0 @@
-package db
-
-import (
- "context"
- "fmt"
- "time"
-
- db "management/internal/db/sqlc"
-)
-
-func initRole() (*db.SysRole, error) {
- arg := db.CreateSysRoleParams{
- Name: "Company",
- DisplayName: "公司",
- Vip: false,
- ParentID: 0,
- ParentPath: ",0,",
- Status: 0,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- }
- role, err := db.Engine.CreateSysRole(context.Background(), &arg)
- if err != nil {
- return nil, err
- }
-
- arg = db.CreateSysRoleParams{
- Name: "SuperAdmin",
- DisplayName: "超级管理员",
- Vip: true,
- ParentID: role.ID,
- ParentPath: fmt.Sprintf(",0,%d,", role.ID),
- Status: 0,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- }
- return db.Engine.CreateSysRole(context.Background(), &arg)
-}
diff --git a/internal/db/init/user.go b/internal/db/init/user.go
deleted file mode 100644
index b98a85a..0000000
--- a/internal/db/init/user.go
+++ /dev/null
@@ -1,46 +0,0 @@
-package db
-
-import (
- "context"
- "time"
-
- db "management/internal/db/sqlc"
- "management/internal/pkg/crypto"
- "management/internal/pkg/rand"
-
- "github.com/google/uuid"
-)
-
-func initUser(departID int32, roleID int32) (*db.SysUser, error) {
- salt, err := rand.String(10)
- if err != nil {
- return nil, err
- }
-
- password := "secret"
- hashedPassword, err := crypto.BcryptHashPassword(password + salt)
- if err != nil {
- return nil, err
- }
-
- initTime, err := time.ParseInLocation(time.DateTime, "0001-01-01 00:00:00", time.Local)
- if err != nil {
- return nil, err
- }
- arg := db.CreateSysUserParams{
- Uuid: uuid.Must(uuid.NewV7()),
- Email: "1185230223@qq.com",
- Username: "kenneth",
- HashedPassword: hashedPassword,
- Salt: salt,
- Avatar: "/statics/admin/images/avatar.jpg",
- Gender: 1,
- DepartmentID: departID,
- RoleID: roleID,
- Status: 0,
- ChangePasswordAt: initTime,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- }
- return db.Engine.CreateSysUser(context.Background(), &arg)
-}
diff --git a/internal/db/migration/000001_init_schema.down.sql b/internal/db/migration/000001_init_schema.down.sql
deleted file mode 100644
index 476d700..0000000
--- a/internal/db/migration/000001_init_schema.down.sql
+++ /dev/null
@@ -1,18 +0,0 @@
-DROP TABLE "sys_user";
-DROP TABLE "sys_user_login_log";
-DROP TABLE "sys_audit_log";
-DROP TABLE "sessions";
-DROP TABLE "sys_department";
-DROP TABLE "sys_role";
-DROP TABLE "sys_menu";
-DROP TABLE "sys_role_menu";
-DROP TABLE "sys_config";
-DROP TABLE "users";
-DROP TABLE "user_sessions";
-DROP TABLE "paper_files";
-DROP TABLE "papers";
-DROP TABLE "idioms";
-DROP TABLE "riddles";
-DROP TABLE "category";
-DROP TABLE "novels";
-DROP TABLE "chapters";
diff --git a/internal/db/migration/000001_init_schema.up.sql b/internal/db/migration/000001_init_schema.up.sql
deleted file mode 100644
index c4046f6..0000000
--- a/internal/db/migration/000001_init_schema.up.sql
+++ /dev/null
@@ -1,682 +0,0 @@
--- SQL dump generated using DBML (dbml.dbdiagram.io)
--- Database: PostgreSQL
--- Generated at: 2025-03-19T06:50:49.966Z
-
-CREATE TABLE "sys_user" (
- "id" SERIAL NOT NULL,
- "uuid" uuid NOT NULL,
- "email" VARCHAR(100) NOT NULL,
- "username" VARCHAR(100) NOT NULL,
- "hashed_password" bytea NOT NULL,
- "salt" VARCHAR(20) NOT NULL,
- "avatar" VARCHAR(200) NOT NULL,
- "gender" INT NOT NULL DEFAULT 0,
- "department_id" INT NOT NULL DEFAULT 0,
- "role_id" INT NOT NULL DEFAULT 0,
- "status" INT NOT NULL DEFAULT 0,
- "change_password_at" TIMESTAMPTZ NOT NULL DEFAULT ('0001-01-01 00:00:00+8'),
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "updated_at" TIMESTAMPTZ NOT NULL DEFAULT ('0001-01-01 00:00:00+8'),
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "sys_user_login_log" (
- "id" BIGSERIAL NOT NULL,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "email" VARCHAR(100) NOT NULL,
- "username" VARCHAR(100) NOT NULL,
- "user_uuid" uuid NOT NULL,
- "is_success" Boolean NOT NULL,
- "message" VARCHAR(300) NOT NULL,
- "referer_url" VARCHAR(500) NOT NULL,
- "url" VARCHAR(500) NOT NULL,
- "os" VARCHAR(50) NOT NULL,
- "ip" VARCHAR(20) NOT NULL,
- "browser" VARCHAR(100) NOT NULL,
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "sys_audit_log" (
- "id" BIGSERIAL NOT NULL,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "email" VARCHAR(100) NOT NULL,
- "username" VARCHAR(100) NOT NULL,
- "user_uuid" uuid NOT NULL,
- "start_at" TIMESTAMPTZ NOT NULL,
- "end_at" TIMESTAMPTZ NOT NULL,
- "duration" VARCHAR(10) NOT NULL,
- "url" VARCHAR(500) NOT NULL,
- "method" VARCHAR(50) NOT NULL,
- "parameters" VARCHAR NOT NULL,
- "referer_url" VARCHAR(500) NOT NULL,
- "os" VARCHAR(50) NOT NULL,
- "ip" VARCHAR(20) NOT NULL,
- "browser" VARCHAR(100) NOT NULL,
- "remark" VARCHAR(300) NOT NULL,
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "sessions" (
- "token" TEXT NOT NULL,
- "data" BYTEA NOT NULL,
- "expiry" TIMESTAMPTZ NOT NULL,
- PRIMARY KEY ("token")
-);
-
-CREATE TABLE "sys_department" (
- "id" SERIAL NOT NULL,
- "name" VARCHAR(200) NOT NULL,
- "parent_id" INT NOT NULL,
- "parent_path" VARCHAR(500) NOT NULL,
- "status" INT NOT NULL DEFAULT 0,
- "sort" INT NOT NULL DEFAULT 0,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "updated_at" TIMESTAMPTZ NOT NULL DEFAULT ('0001-01-01 00:00:00+8'),
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "sys_role" (
- "id" SERIAL NOT NULL,
- "name" VARCHAR(200) NOT NULL,
- "display_name" VARCHAR(200) NOT NULL,
- "parent_id" INT NOT NULL,
- "parent_path" VARCHAR(500) NOT NULL,
- "vip" Boolean NOT NULL,
- "status" INT NOT NULL DEFAULT 0,
- "sort" INT NOT NULL DEFAULT 0,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "updated_at" TIMESTAMPTZ NOT NULL DEFAULT ('0001-01-01 00:00:00+8'),
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "sys_menu" (
- "id" SERIAL NOT NULL,
- "name" VARCHAR(200) NOT NULL,
- "display_name" VARCHAR(200) NOT NULL,
- "url" VARCHAR(200) NOT NULL,
- "type" VARCHAR(50) NOT NULL,
- "parent_id" INT NOT NULL,
- "parent_path" VARCHAR(500) NOT NULL,
- "avatar" VARCHAR(100) NOT NULL,
- "style" VARCHAR(100) NOT NULL,
- "visible" Boolean NOT NULL,
- "is_list" Boolean NOT NULL,
- "status" INT NOT NULL DEFAULT 0,
- "sort" INT NOT NULL DEFAULT 0,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "updated_at" TIMESTAMPTZ NOT NULL DEFAULT ('0001-01-01 00:00:00+8'),
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "sys_role_menu" (
- "role_id" INT NOT NULL,
- "menu_id" INT NOT NULL,
- PRIMARY KEY ("role_id", "menu_id")
-);
-
-CREATE TABLE "sys_config" (
- "id" SERIAL NOT NULL,
- "key" VARCHAR(100) NOT NULL,
- "value" jsonb NOT NULL,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "updated_at" TIMESTAMPTZ NOT NULL DEFAULT ('0001-01-01 00:00:00+8'),
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "categories" (
- "id" SERIAL NOT NULL,
- "name" VARCHAR(100) NOT NULL,
- "icon" VARCHAR(300) NOT NULL DEFAULT '',
- "description" VARCHAR(500) NOT NULL DEFAULT '',
- "letter" VARCHAR(100) NOT NULL DEFAULT '',
- "parent_id" INT NOT NULL DEFAULT 0,
- "parent_path" VARCHAR(500) NOT NULL DEFAULT '',
- "status" SMALLINT NOT NULL DEFAULT 0,
- "sort" INT NOT NULL DEFAULT 0,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "updated_at" TIMESTAMPTZ NOT NULL DEFAULT ('0001-01-01 00:00:00+8'),
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "customers" (
- "id" BIGINT NOT NULL,
- "name" VARCHAR(100) NOT NULL,
- "category" INT NOT NULL DEFAULT 0,
- "source" INT NOT NULL DEFAULT 0,
- "address" VARCHAR(500) NOT NULL DEFAULT '',
- "contact_name" VARCHAR(100) NOT NULL DEFAULT '',
- "contact_phone" VARCHAR(50) NOT NULL DEFAULT '',
- "status" SMALLINT NOT NULL DEFAULT 0,
- "sort" INT NOT NULL DEFAULT 0,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "created_by" INT NOT NULL DEFAULT 0,
- "updated_at" TIMESTAMPTZ NOT NULL DEFAULT ('0001-01-01 00:00:00+8'),
- "updated_by" INT NOT NULL DEFAULT 0,
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "customer_contact" (
- "id" SERIAL NOT NULL,
- "name" VARCHAR(100) NOT NULL,
- "telephone" VARCHAR(50) NOT NULL,
- "customer_id" BIGINT NOT NULL,
- "status" SMALLINT NOT NULL DEFAULT 0,
- "sort" INT NOT NULL DEFAULT 0,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "created_by" INT NOT NULL DEFAULT 0,
- "updated_at" TIMESTAMPTZ NOT NULL DEFAULT ('0001-01-01 00:00:00+8'),
- "updated_by" INT NOT NULL DEFAULT 0,
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "projects" (
- "id" BIGINT NOT NULL,
- "name" VARCHAR(100) NOT NULL,
- "start_at" TIMESTAMPTZ NOT NULL,
- "end_at" TIMESTAMPTZ NOT NULL,
- "customer_id" BIGINT NOT NULL,
- "total_money" DECIMAL(10,2) NOT NULL DEFAULT 0,
- "description" VARCHAR(500) NOT NULL DEFAULT '',
- "apply_at" TIMESTAMPTZ NOT NULL,
- "apply_user_id" INT NOT NULL,
- "manager_id" INT NOT NULL,
- "members" VARCHAR(1000) NOT NULL,
- "status" SMALLINT NOT NULL DEFAULT 0,
- "sort" INT NOT NULL DEFAULT 0,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "created_user_id" INT NOT NULL DEFAULT 0,
- "updated_at" TIMESTAMPTZ NOT NULL DEFAULT ('0001-01-01 00:00:00+8'),
- "updated_user_id" INT NOT NULL DEFAULT 0,
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "project_files" (
- "id" BIGINT NOT NULL,
- "name" VARCHAR(100) NOT NULL,
- "path" VARCHAR(500) NOT NULL,
- "project_id" BIGINT NOT NULL,
- "sort" INT NOT NULL DEFAULT 0,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "created_user_id" INT NOT NULL DEFAULT 0,
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "budgets" (
- "id" BIGSERIAL NOT NULL,
- "project_id" BIGINT NOT NULL,
- "name" VARCHAR(100) NOT NULL,
- "budget_type" INT NOT NULL,
- "category" INT NOT NULL,
- "start_at" TIMESTAMPTZ NOT NULL,
- "end_at" TIMESTAMPTZ NOT NULL,
- "amount" DECIMAL(10,2) NOT NULL DEFAULT 0,
- "used_amount" DECIMAL(10,2) NOT NULL DEFAULT 0,
- "remaining_amount" DECIMAL(10,2) NOT NULL DEFAULT 0,
- "remark" VARCHAR(500) NOT NULL DEFAULT '',
- "status" SMALLINT NOT NULL DEFAULT 0,
- "sort" INT NOT NULL DEFAULT 0,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "created_user_id" INT NOT NULL DEFAULT 0,
- "updated_at" TIMESTAMPTZ NOT NULL DEFAULT ('0001-01-01 00:00:00+8'),
- "updated_user_id" INT NOT NULL DEFAULT 0,
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "incomes" (
- "id" BIGSERIAL NOT NULL,
- "project_id" BIGINT NOT NULL,
- "budget_id" BIGINT NOT NULL DEFAULT 0,
- "amount" DECIMAL(10,2) NOT NULL DEFAULT 0,
- "income_at" TIMESTAMPTZ NOT NULL,
- "income_type" INT NOT NULL,
- "income_bank" INT NOT NULL,
- "remark" VARCHAR(500) NOT NULL DEFAULT '',
- "status" SMALLINT NOT NULL DEFAULT 0,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "created_user_id" INT NOT NULL DEFAULT 0,
- "updated_at" TIMESTAMPTZ NOT NULL DEFAULT ('0001-01-01 00:00:00+8'),
- "updated_user_id" INT NOT NULL DEFAULT 0,
- PRIMARY KEY ("id")
-);
-
-CREATE TABLE "expenses" (
- "id" BIGSERIAL NOT NULL,
- "project_id" BIGINT NOT NULL,
- "budget_id" BIGINT NOT NULL DEFAULT 0,
- "amount" DECIMAL(10,2) NOT NULL DEFAULT 0,
- "expenses_at" TIMESTAMPTZ NOT NULL,
- "expenses_type" INT NOT NULL,
- "remark" VARCHAR(500) NOT NULL DEFAULT '',
- "status" SMALLINT NOT NULL DEFAULT 0,
- "created_at" TIMESTAMPTZ NOT NULL DEFAULT (NOW()),
- "created_user_id" INT NOT NULL DEFAULT 0,
- "updated_at" TIMESTAMPTZ NOT NULL DEFAULT ('0001-01-01 00:00:00+8'),
- "updated_user_id" INT NOT NULL DEFAULT 0,
- PRIMARY KEY ("id")
-);
-
-CREATE UNIQUE INDEX ON "sys_user" ("uuid");
-
-CREATE UNIQUE INDEX ON "sys_user" ("username");
-
-CREATE UNIQUE INDEX ON "sys_user" ("email");
-
-CREATE INDEX ON "sys_user" ("status");
-
-CREATE INDEX ON "sys_user_login_log" ("created_at");
-
-CREATE INDEX ON "sys_user_login_log" ("email");
-
-CREATE INDEX ON "sys_user_login_log" ("username");
-
-CREATE INDEX ON "sys_audit_log" ("created_at");
-
-CREATE INDEX ON "sys_audit_log" ("email");
-
-CREATE INDEX ON "sys_audit_log" ("username");
-
-CREATE INDEX ON "sessions" ("expiry");
-
-CREATE UNIQUE INDEX ON "sys_department" ("name");
-
-CREATE INDEX ON "sys_department" ("status");
-
-CREATE UNIQUE INDEX ON "sys_role" ("name");
-
-CREATE UNIQUE INDEX ON "sys_role" ("display_name");
-
-CREATE INDEX ON "sys_role" ("status");
-
-CREATE UNIQUE INDEX ON "sys_menu" ("url");
-
-CREATE INDEX ON "sys_menu" ("type");
-
-CREATE INDEX ON "sys_menu" ("parent_id");
-
-CREATE INDEX ON "sys_menu" ("status");
-
-CREATE UNIQUE INDEX ON "sys_config" ("key");
-
-CREATE INDEX ON "categories" ("name");
-
-CREATE UNIQUE INDEX ON "categories" ("letter");
-
-CREATE INDEX ON "customers" ("name");
-
-CREATE INDEX ON "customer_contact" ("name");
-
-CREATE INDEX ON "customer_contact" ("telephone");
-
-CREATE INDEX ON "projects" ("name");
-
-CREATE INDEX ON "project_files" ("name");
-
-CREATE INDEX ON "budgets" ("project_id");
-
-CREATE INDEX ON "budgets" ("category");
-
-CREATE INDEX ON "incomes" ("project_id");
-
-CREATE INDEX ON "incomes" ("budget_id");
-
-CREATE INDEX ON "incomes" ("income_type");
-
-CREATE INDEX ON "expenses" ("project_id");
-
-CREATE INDEX ON "expenses" ("budget_id");
-
-CREATE INDEX ON "expenses" ("expenses_type");
-
-COMMENT ON COLUMN "sys_user"."email" IS '邮箱地址';
-
-COMMENT ON COLUMN "sys_user"."username" IS '用户名称';
-
-COMMENT ON COLUMN "sys_user"."hashed_password" IS '加密密码';
-
-COMMENT ON COLUMN "sys_user"."salt" IS '密码盐值';
-
-COMMENT ON COLUMN "sys_user"."avatar" IS '头像';
-
-COMMENT ON COLUMN "sys_user"."gender" IS '性别';
-
-COMMENT ON COLUMN "sys_user"."department_id" IS '部门';
-
-COMMENT ON COLUMN "sys_user"."role_id" IS '角色';
-
-COMMENT ON COLUMN "sys_user"."status" IS '状态';
-
-COMMENT ON COLUMN "sys_user"."change_password_at" IS '密码修改时间';
-
-COMMENT ON COLUMN "sys_user"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "sys_user"."updated_at" IS '更新时间';
-
-COMMENT ON COLUMN "sys_user_login_log"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "sys_user_login_log"."email" IS '邮箱地址';
-
-COMMENT ON COLUMN "sys_user_login_log"."username" IS '用户名称';
-
-COMMENT ON COLUMN "sys_user_login_log"."user_uuid" IS '用户uuid';
-
-COMMENT ON COLUMN "sys_user_login_log"."is_success" IS '是否登陆成功';
-
-COMMENT ON COLUMN "sys_user_login_log"."message" IS '登陆消息';
-
-COMMENT ON COLUMN "sys_user_login_log"."referer_url" IS '上一个链接';
-
-COMMENT ON COLUMN "sys_user_login_log"."url" IS '链接';
-
-COMMENT ON COLUMN "sys_user_login_log"."os" IS '系统';
-
-COMMENT ON COLUMN "sys_user_login_log"."ip" IS 'ip';
-
-COMMENT ON COLUMN "sys_user_login_log"."browser" IS '浏览器';
-
-COMMENT ON COLUMN "sys_audit_log"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "sys_audit_log"."email" IS '邮箱地址';
-
-COMMENT ON COLUMN "sys_audit_log"."username" IS '用户名称';
-
-COMMENT ON COLUMN "sys_audit_log"."user_uuid" IS '用户uuid';
-
-COMMENT ON COLUMN "sys_audit_log"."start_at" IS '请求开始时间';
-
-COMMENT ON COLUMN "sys_audit_log"."end_at" IS '请求结束时间';
-
-COMMENT ON COLUMN "sys_audit_log"."duration" IS '请求总时间';
-
-COMMENT ON COLUMN "sys_audit_log"."url" IS '请求链接';
-
-COMMENT ON COLUMN "sys_audit_log"."method" IS '请求类型';
-
-COMMENT ON COLUMN "sys_audit_log"."parameters" IS '请求参数';
-
-COMMENT ON COLUMN "sys_audit_log"."referer_url" IS '上一个链接';
-
-COMMENT ON COLUMN "sys_audit_log"."os" IS '系统';
-
-COMMENT ON COLUMN "sys_audit_log"."ip" IS 'ip';
-
-COMMENT ON COLUMN "sys_audit_log"."browser" IS '浏览器';
-
-COMMENT ON COLUMN "sys_audit_log"."remark" IS '备注';
-
-COMMENT ON COLUMN "sessions"."token" IS 'token';
-
-COMMENT ON COLUMN "sessions"."data" IS 'data';
-
-COMMENT ON COLUMN "sessions"."expiry" IS 'expiry';
-
-COMMENT ON COLUMN "sys_department"."name" IS '部门名称';
-
-COMMENT ON COLUMN "sys_department"."parent_id" IS '上级id';
-
-COMMENT ON COLUMN "sys_department"."parent_path" IS '树路径';
-
-COMMENT ON COLUMN "sys_department"."status" IS '状态';
-
-COMMENT ON COLUMN "sys_department"."sort" IS '排序';
-
-COMMENT ON COLUMN "sys_department"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "sys_department"."updated_at" IS '更新时间';
-
-COMMENT ON COLUMN "sys_role"."name" IS '名称';
-
-COMMENT ON COLUMN "sys_role"."display_name" IS '显示名称';
-
-COMMENT ON COLUMN "sys_role"."parent_id" IS '上级id';
-
-COMMENT ON COLUMN "sys_role"."parent_path" IS '树路径';
-
-COMMENT ON COLUMN "sys_role"."vip" IS '是否vip';
-
-COMMENT ON COLUMN "sys_role"."status" IS '状态';
-
-COMMENT ON COLUMN "sys_role"."sort" IS '排序';
-
-COMMENT ON COLUMN "sys_role"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "sys_role"."updated_at" IS '更新时间';
-
-COMMENT ON COLUMN "sys_menu"."name" IS '名称';
-
-COMMENT ON COLUMN "sys_menu"."display_name" IS '显示名称';
-
-COMMENT ON COLUMN "sys_menu"."url" IS '菜单url';
-
-COMMENT ON COLUMN "sys_menu"."type" IS '菜单类型(node, menu, btn)';
-
-COMMENT ON COLUMN "sys_menu"."parent_id" IS '上级id';
-
-COMMENT ON COLUMN "sys_menu"."parent_path" IS '树路径';
-
-COMMENT ON COLUMN "sys_menu"."avatar" IS '菜单图标';
-
-COMMENT ON COLUMN "sys_menu"."style" IS '菜单样式';
-
-COMMENT ON COLUMN "sys_menu"."visible" IS '是否可见';
-
-COMMENT ON COLUMN "sys_menu"."is_list" IS '是否列表';
-
-COMMENT ON COLUMN "sys_menu"."status" IS '状态';
-
-COMMENT ON COLUMN "sys_menu"."sort" IS '排序';
-
-COMMENT ON COLUMN "sys_menu"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "sys_menu"."updated_at" IS '更新时间';
-
-COMMENT ON COLUMN "sys_role_menu"."role_id" IS '角色id';
-
-COMMENT ON COLUMN "sys_role_menu"."menu_id" IS '菜单id';
-
-COMMENT ON COLUMN "sys_config"."key" IS '存储键';
-
-COMMENT ON COLUMN "sys_config"."value" IS '存储值';
-
-COMMENT ON COLUMN "sys_config"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "sys_config"."updated_at" IS '更新时间';
-
-COMMENT ON COLUMN "categories"."id" IS 'ID';
-
-COMMENT ON COLUMN "categories"."name" IS '名称';
-
-COMMENT ON COLUMN "categories"."icon" IS '图标';
-
-COMMENT ON COLUMN "categories"."description" IS '描述';
-
-COMMENT ON COLUMN "categories"."letter" IS '拼音';
-
-COMMENT ON COLUMN "categories"."parent_id" IS '父级ID';
-
-COMMENT ON COLUMN "categories"."parent_path" IS '树路径';
-
-COMMENT ON COLUMN "categories"."status" IS '状态';
-
-COMMENT ON COLUMN "categories"."sort" IS '排序';
-
-COMMENT ON COLUMN "categories"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "categories"."updated_at" IS '更新时间';
-
-COMMENT ON COLUMN "customers"."id" IS 'ID';
-
-COMMENT ON COLUMN "customers"."name" IS '名称';
-
-COMMENT ON COLUMN "customers"."category" IS '类别';
-
-COMMENT ON COLUMN "customers"."source" IS '来源';
-
-COMMENT ON COLUMN "customers"."address" IS '地址';
-
-COMMENT ON COLUMN "customers"."contact_name" IS '主要联系人';
-
-COMMENT ON COLUMN "customers"."contact_phone" IS '主要联系人手机';
-
-COMMENT ON COLUMN "customers"."status" IS '状态';
-
-COMMENT ON COLUMN "customers"."sort" IS '排序';
-
-COMMENT ON COLUMN "customers"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "customers"."created_by" IS '创建人';
-
-COMMENT ON COLUMN "customers"."updated_at" IS '更新时间';
-
-COMMENT ON COLUMN "customers"."updated_by" IS '更新人';
-
-COMMENT ON COLUMN "customer_contact"."id" IS 'ID';
-
-COMMENT ON COLUMN "customer_contact"."name" IS '名称';
-
-COMMENT ON COLUMN "customer_contact"."telephone" IS '联系方式';
-
-COMMENT ON COLUMN "customer_contact"."customer_id" IS '客户ID';
-
-COMMENT ON COLUMN "customer_contact"."status" IS '状态';
-
-COMMENT ON COLUMN "customer_contact"."sort" IS '排序';
-
-COMMENT ON COLUMN "customer_contact"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "customer_contact"."created_by" IS '创建人';
-
-COMMENT ON COLUMN "customer_contact"."updated_at" IS '更新时间';
-
-COMMENT ON COLUMN "customer_contact"."updated_by" IS '更新人';
-
-COMMENT ON COLUMN "projects"."id" IS 'ID';
-
-COMMENT ON COLUMN "projects"."name" IS '名称';
-
-COMMENT ON COLUMN "projects"."start_at" IS '开始时间';
-
-COMMENT ON COLUMN "projects"."end_at" IS '结束时间';
-
-COMMENT ON COLUMN "projects"."customer_id" IS '客户ID';
-
-COMMENT ON COLUMN "projects"."total_money" IS '总金额';
-
-COMMENT ON COLUMN "projects"."description" IS '简介';
-
-COMMENT ON COLUMN "projects"."apply_at" IS '申请时间';
-
-COMMENT ON COLUMN "projects"."apply_user_id" IS '申请人';
-
-COMMENT ON COLUMN "projects"."manager_id" IS '项目经理';
-
-COMMENT ON COLUMN "projects"."members" IS '项目成员';
-
-COMMENT ON COLUMN "projects"."status" IS '状态';
-
-COMMENT ON COLUMN "projects"."sort" IS '排序';
-
-COMMENT ON COLUMN "projects"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "projects"."created_user_id" IS '创建人';
-
-COMMENT ON COLUMN "projects"."updated_at" IS '更新时间';
-
-COMMENT ON COLUMN "projects"."updated_user_id" IS '更新人';
-
-COMMENT ON COLUMN "project_files"."id" IS 'ID';
-
-COMMENT ON COLUMN "project_files"."name" IS '名称';
-
-COMMENT ON COLUMN "project_files"."path" IS '路径';
-
-COMMENT ON COLUMN "project_files"."project_id" IS '项目ID';
-
-COMMENT ON COLUMN "project_files"."sort" IS '排序';
-
-COMMENT ON COLUMN "project_files"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "project_files"."created_user_id" IS '创建人';
-
-COMMENT ON COLUMN "budgets"."id" IS 'ID';
-
-COMMENT ON COLUMN "budgets"."project_id" IS '项目ID';
-
-COMMENT ON COLUMN "budgets"."name" IS '名称';
-
-COMMENT ON COLUMN "budgets"."budget_type" IS '预算类型: 收入/支出';
-
-COMMENT ON COLUMN "budgets"."category" IS '类别';
-
-COMMENT ON COLUMN "budgets"."start_at" IS '开始时间';
-
-COMMENT ON COLUMN "budgets"."end_at" IS '结束时间';
-
-COMMENT ON COLUMN "budgets"."amount" IS '预算金额';
-
-COMMENT ON COLUMN "budgets"."used_amount" IS '已使用金额';
-
-COMMENT ON COLUMN "budgets"."remaining_amount" IS '剩余金额';
-
-COMMENT ON COLUMN "budgets"."remark" IS '备注';
-
-COMMENT ON COLUMN "budgets"."status" IS '状态';
-
-COMMENT ON COLUMN "budgets"."sort" IS '排序';
-
-COMMENT ON COLUMN "budgets"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "budgets"."created_user_id" IS '创建人';
-
-COMMENT ON COLUMN "budgets"."updated_at" IS '更新时间';
-
-COMMENT ON COLUMN "budgets"."updated_user_id" IS '更新人';
-
-COMMENT ON COLUMN "incomes"."id" IS 'ID';
-
-COMMENT ON COLUMN "incomes"."project_id" IS '项目ID';
-
-COMMENT ON COLUMN "incomes"."budget_id" IS '预算ID';
-
-COMMENT ON COLUMN "incomes"."amount" IS '收入金额';
-
-COMMENT ON COLUMN "incomes"."income_at" IS '收入时间';
-
-COMMENT ON COLUMN "incomes"."income_type" IS '收入类型';
-
-COMMENT ON COLUMN "incomes"."income_bank" IS '收入银行';
-
-COMMENT ON COLUMN "incomes"."remark" IS '备注';
-
-COMMENT ON COLUMN "incomes"."status" IS '状态';
-
-COMMENT ON COLUMN "incomes"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "incomes"."created_user_id" IS '创建人';
-
-COMMENT ON COLUMN "incomes"."updated_at" IS '更新时间';
-
-COMMENT ON COLUMN "incomes"."updated_user_id" IS '更新人';
-
-COMMENT ON COLUMN "expenses"."id" IS 'ID';
-
-COMMENT ON COLUMN "expenses"."project_id" IS '项目ID';
-
-COMMENT ON COLUMN "expenses"."budget_id" IS '预算ID';
-
-COMMENT ON COLUMN "expenses"."amount" IS '支出金额';
-
-COMMENT ON COLUMN "expenses"."expenses_at" IS '支出时间';
-
-COMMENT ON COLUMN "expenses"."expenses_type" IS '支出类型';
-
-COMMENT ON COLUMN "expenses"."remark" IS '备注';
-
-COMMENT ON COLUMN "expenses"."status" IS '状态';
-
-COMMENT ON COLUMN "expenses"."created_at" IS '创建时间';
-
-COMMENT ON COLUMN "expenses"."created_user_id" IS '创建人';
-
-COMMENT ON COLUMN "expenses"."updated_at" IS '更新时间';
-
-COMMENT ON COLUMN "expenses"."updated_user_id" IS '更新人';
diff --git a/internal/db/model/form/budget.go b/internal/db/model/form/budget.go
deleted file mode 100644
index 5f693e8..0000000
--- a/internal/db/model/form/budget.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package form
-
-import (
- "time"
-
- db "management/internal/db/sqlc"
- "management/internal/pkg/convertor"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type BudgetForm struct {
- ID int64 `json:"id"`
- ProjectID int64 `json:"project_id"`
- Name string `json:"name"`
- BudgetType int32 `json:"budget_type"`
- Category int32 `json:"category"`
- StartAt time.Time `json:"start_at"`
- EndAt time.Time `json:"end_at"`
- Amount float64 `json:"amount"`
- AmountF pgtype.Numeric `comment:"预算金额"`
- UsedAmount float64 `json:"used_amount"`
- UsedAmountF pgtype.Numeric `comment:"已支付金额"`
- RemainingAmount float64 `json:"remaining_amount"`
- RemainingAmountF pgtype.Numeric `comment:"剩余金额"`
- Remark string `json:"remark"`
- Status int16 `json:"status"`
- Sort int32 `json:"sort"`
- CreatedAt time.Time `json:"created_at"`
- CreatedName string `comment:"创建人"`
- UpdatedAt time.Time `json:"updated_at"`
- UpdatedName string `comment:"更新人"`
-}
-
-func (f *BudgetForm) ToForm(p *db.Budget) *BudgetForm {
- return &BudgetForm{
- ID: p.ID,
- ProjectID: p.ProjectID,
- Name: p.Name,
- BudgetType: p.BudgetType,
- Category: p.Category,
- StartAt: p.StartAt,
- EndAt: p.EndAt,
- Amount: convertor.NumericToFloat64(p.Amount),
- UsedAmount: convertor.NumericToFloat64(p.UsedAmount),
- RemainingAmount: convertor.NumericToFloat64(p.RemainingAmount),
- Remark: p.Remark,
- Status: p.Status,
- Sort: p.Sort,
- CreatedAt: p.CreatedAt,
- UpdatedAt: p.UpdatedAt,
- }
-}
diff --git a/internal/db/model/form/customer.go b/internal/db/model/form/customer.go
deleted file mode 100644
index f56dbeb..0000000
--- a/internal/db/model/form/customer.go
+++ /dev/null
@@ -1,39 +0,0 @@
-package form
-
-import (
- "time"
-
- db "management/internal/db/sqlc"
-)
-
-type CustomerForm struct {
- ID int64 `json:"id" validate:"min=0" comment:"ID"`
- Name string `json:"name" validate:"required" comment:"名称"`
- Category int32 `json:"category" validate:"min=0" comment:"类别"`
- Source int32 `json:"source" validate:"min=0" comment:"来源"`
- Address string `json:"address" comment:"地址"`
- ContactName string `json:"contact_name" comment:"联系人姓名"`
- ContactPhone string `json:"contact_phone" validate:"telephone" comment:"联系人手机"`
- Status int16 `json:"status" validate:"min=-1" comment:"状态"`
- Sort int32 `json:"sort" validate:"min=0" comment:"排序"`
- CreatedAt time.Time `json:"created_at" comment:"创建时间"`
- CreatedBy string `json:"created_by" comment:"创建人"`
- UpdatedAt time.Time `json:"updated_at" comment:"更新时间"`
- UpdatedBy string `json:"updated_by" comment:"更新人"`
-}
-
-func (f *CustomerForm) ToForm(c *db.Customer) *CustomerForm {
- return &CustomerForm{
- ID: c.ID,
- Name: c.Name,
- Category: c.Category,
- Source: c.Source,
- Address: c.Address,
- ContactName: c.ContactName,
- ContactPhone: c.ContactPhone,
- Status: c.Status,
- Sort: c.Sort,
- CreatedAt: c.CreatedAt,
- UpdatedAt: c.UpdatedAt,
- }
-}
diff --git a/internal/db/model/form/expense.go b/internal/db/model/form/expense.go
deleted file mode 100644
index 11c35bf..0000000
--- a/internal/db/model/form/expense.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package form
-
-import (
- "time"
-
- db "management/internal/db/sqlc"
- "management/internal/pkg/convertor"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type ExpenseForm struct {
- ID int64 `json:"id"`
- ProjectID int64 `json:"project_id"`
- BudgetID int64 `json:"budget_id"`
- Amount float64 `json:"amount"`
- AmountF pgtype.Numeric `comment:"报销金额"`
- ExpensesAt time.Time `json:"expenses_at"`
- ExpensesType int32 `json:"expenses_type"`
- Remark string `json:"remark"`
- Status int16 `json:"status"`
- CreatedAt time.Time `json:"created_at"`
- CreatedName string `comment:"创建人"`
- UpdatedAt time.Time `json:"updated_at"`
- UpdatedName string `comment:"更新人"`
-}
-
-func (f *ExpenseForm) ToForm(p *db.Expense) *ExpenseForm {
- return &ExpenseForm{
- ID: p.ID,
- ProjectID: p.ProjectID,
- BudgetID: p.BudgetID,
- Amount: convertor.NumericToFloat64(p.Amount),
- AmountF: p.Amount,
- ExpensesAt: p.ExpensesAt,
- ExpensesType: p.ExpensesType,
- Remark: p.Remark,
- Status: p.Status,
- CreatedAt: p.CreatedAt,
- UpdatedAt: p.UpdatedAt,
- }
-}
diff --git a/internal/db/model/form/form.go b/internal/db/model/form/form.go
deleted file mode 100644
index 4b67f64..0000000
--- a/internal/db/model/form/form.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package form
-
-import (
- "net/http"
-
- "management/internal/pkg/validation"
-
- "github.com/gorilla/schema"
-)
-
-// 初始化一个解码器实例
-var decoder = schema.NewDecoder()
-
-func BindForm(r *http.Request, form any) error {
- if err := r.ParseForm(); err != nil {
- return err
- }
-
- // 忽略名为 "csrf_token" 的表单字段
- delete(r.PostForm, "csrf_token")
-
- // decoder.RegisterConverter(time.Time{}, func(s string) reflect.Value {
- // res, err := time.ParseInLocation("2006-01-02", s, time.Local)
- // if err != nil {
- // panic(err)
- // }
- // return reflect.ValueOf(res)
- // })
-
- if err := decoder.Decode(form, r.PostForm); err != nil {
- return err
- }
-
- // 校验表单规则
- if err := validation.ValidateForm(form); err != nil {
- return err
- }
-
- return nil
-}
diff --git a/internal/db/model/form/income.go b/internal/db/model/form/income.go
deleted file mode 100644
index 920ca16..0000000
--- a/internal/db/model/form/income.go
+++ /dev/null
@@ -1,44 +0,0 @@
-package form
-
-import (
- "time"
-
- db "management/internal/db/sqlc"
- "management/internal/pkg/convertor"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type IncomeForm struct {
- ID int64 `json:"id"`
- ProjectID int64 `json:"project_id"`
- BudgetID int64 `json:"budget_id"`
- Amount float64 `json:"amount"`
- AmountF pgtype.Numeric `comment:"收入金额"`
- IncomeAt time.Time `json:"income_at"`
- IncomeType int32 `json:"income_type"`
- IncomeBank int32 `json:"income_bank"`
- Remark string `json:"remark"`
- Status int16 `json:"status"`
- CreatedAt time.Time `json:"created_at"`
- CreatedName string `comment:"创建人"`
- UpdatedAt time.Time `json:"updated_at"`
- UpdatedName string `comment:"更新人"`
-}
-
-func (f *IncomeForm) ToForm(p *db.Income) *IncomeForm {
- return &IncomeForm{
- ID: p.ID,
- ProjectID: p.ProjectID,
- BudgetID: p.BudgetID,
- Amount: convertor.NumericToFloat64(p.Amount),
- AmountF: p.Amount,
- IncomeAt: p.IncomeAt,
- IncomeType: p.IncomeType,
- IncomeBank: p.IncomeBank,
- Remark: p.Remark,
- Status: p.Status,
- CreatedAt: p.CreatedAt,
- UpdatedAt: p.UpdatedAt,
- }
-}
diff --git a/internal/db/model/form/project.go b/internal/db/model/form/project.go
deleted file mode 100644
index c9f12d3..0000000
--- a/internal/db/model/form/project.go
+++ /dev/null
@@ -1,80 +0,0 @@
-package form
-
-import (
- "time"
-
- db "management/internal/db/sqlc"
- "management/internal/pkg/convertor"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type ProjectFileForm struct {
- Combination string `schema:"-"`
- ProjectFileItems []*ProjectFileItemForm `schema:"-"`
-}
-type ProjectFileItemForm struct {
- Name string `schema:"-"`
- Path string `schema:"-"`
- Combination string `schema:"-"`
-}
-
-type ProjectForm struct {
- ID int64 `validate:"min=0" comment:"ID"`
- Name string `validate:"required" comment:"名称"`
- StartAt time.Time `validate:"required" comment:"开始时间"`
- EndAt time.Time `validate:"required" comment:"结束时间"`
- CustomerID int64 `validate:"required" comment:"客户ID"`
- CustomerName string `comment:"客户名称"`
- TotalMoney float64 `validate:"required" comment:"总金额"`
- TotalMoneyF pgtype.Numeric `comment:"总金额"`
- Description string `comment:"简介"`
- ApplyAt time.Time `validate:"required" comment:"申请时间"`
- ApplyUserID int32 `validate:"required" comment:"申请人"`
- ApplyUserName string `comment:"申请人"`
- ManagerID int32 `comment:"项目经理"`
- ManagerName string `comment:"项目经理"`
- Members string `comment:"项目成员"`
- MembersName string `comment:"项目成员"`
- Status int16 `validate:"min=-1" comment:"状态"`
- Sort int32 `validate:"min=0" comment:"排序"`
- CreatedAt time.Time `comment:"创建时间"`
- CreatedName string `comment:"创建人"`
- UpdatedAt time.Time `comment:"更新时间"`
- UpdatedName string `comment:"更新人"`
- ProjectFiles *ProjectFileForm `schema:"-"`
-}
-
-func (f *ProjectForm) ToForm(p *db.Project, pfs []*db.ProjectFile) *ProjectForm {
- var allCombinationPath string
- var pfi []*ProjectFileItemForm
- for _, pf := range pfs {
- pfi = append(pfi, &ProjectFileItemForm{
- Name: pf.Name,
- Path: pf.Path,
- Combination: pf.Name + "|" + pf.Path,
- })
- allCombinationPath += pf.Name + "|" + pf.Path + ","
- }
- return &ProjectForm{
- ID: p.ID,
- Name: p.Name,
- StartAt: p.StartAt,
- EndAt: p.EndAt,
- CustomerID: p.CustomerID,
- TotalMoney: convertor.NumericToFloat64(p.TotalMoney),
- Description: p.Description,
- ApplyAt: p.ApplyAt,
- ApplyUserID: p.ApplyUserID,
- ManagerID: p.ManagerID,
- Members: p.Members,
- Status: p.Status,
- Sort: p.Sort,
- CreatedAt: p.CreatedAt,
- UpdatedAt: p.UpdatedAt,
- ProjectFiles: &ProjectFileForm{
- Combination: allCombinationPath,
- ProjectFileItems: pfi,
- },
- }
-}
diff --git a/internal/db/model/view/dashboard.go b/internal/db/model/view/dashboard.go
deleted file mode 100644
index 2c93e29..0000000
--- a/internal/db/model/view/dashboard.go
+++ /dev/null
@@ -1,107 +0,0 @@
-package view
-
-type DashboardProject struct {
- ProjectIncome float64 `json:"project_income"` // 项目收入
- ProjectExpense float64 `json:"project_expense"` // 项目支出
- ProjectProfit float64 `json:"project_profit"` // 项目利润
- ProjectProfitRate string `json:"project_profit_rate"` // 项目利润率
- IncomeExpenseEcharts EchartsOption `json:"income_expense_echarts"` // 收支图表
- IncomeEcharts EchartsOption `json:"income_echarts"` // 收入图表
- ExpenseEcharts EchartsOption `json:"expense_echarts"` // 支出图表
-}
-
-type EchartsOption struct {
- Title Title `json:"title"`
- Color []string `json:"color"`
- ToolTip ToolTip `json:"tooltip"`
- Grid Grid `json:"grid"`
- Legend Legend `json:"legend"`
- XAxis []XAxis `json:"xAxis"`
- YAxis []YAxis `json:"yAxis"`
- BarMaxWidth string `json:"barMaxWidth"`
- Label Label `json:"label"`
- Series []Series `json:"series"`
-}
-
-type Series struct {
- Name string `json:"name,omitempty"`
- Type string `json:"type,omitempty"`
- Data any `json:"data,omitempty"`
- ItemStyle ItemStyle `json:"itemStyle,omitempty"`
- Radius string `json:"radius,omitempty"`
- Label Label `json:"label,omitempty"`
-}
-
-type ItemStyle struct {
- Normal Normal `json:"normal,omitempty"`
-}
-type Normal struct {
- Color string `json:"color,omitempty"`
-}
-
-type Title struct {
- Text string `json:"text,omitempty"`
- Orient string `json:"orient,omitempty"`
- Left string `json:"left,omitempty"`
- Top int `json:"top,omitempty"`
- FontSize int `json:"fontSize,omitempty"`
- TextStyle TextStyle `json:"textStyle,omitempty"`
-}
-
-type TextStyle struct {
- Color string `json:"color,omitempty"`
- FontWeight string `json:"fontWeight,omitempty"`
-}
-
-type ToolTip struct {
- Trigger string `json:"trigger,omitempty"`
- AxisPointer AxisPointer `json:"axisPointer,omitempty"`
-}
-type AxisPointer struct {
- Type string `json:"type,omitempty"`
-}
-
-type Grid struct {
- Left string `json:"left,omitempty"`
- Right string `json:"right,omitempty"`
- Bottom string `json:"bottom,omitempty"`
- ContainLabel bool `json:"containLabel,omitempty"`
-}
-
-type Legend struct {
- Left string `json:"left,omitempty"`
- Top string `json:"top,omitempty"`
- Data []string `json:"data,omitempty"`
-}
-
-type XAxis struct {
- Type string `json:"type,omitempty"`
- Data []string `json:"data,omitempty"`
- AxisTick AxisTick `json:"axisTick,omitempty"`
-}
-
-type AxisTick struct {
- AlignWithLabel bool `json:"alignWithLabel,omitempty"`
-}
-
-type YAxis struct {
- Name string `json:"name,omitempty"`
- Type string `json:"type,omitempty"`
-}
-
-type Label struct {
- Show bool `json:"show,omitempty"`
- Position string `json:"position,omitempty"`
- TextStyle TextStyle `json:"textStyle,omitempty"`
- Normal LableNormal `json:"normal,omitempty"`
-}
-
-type LableNormal struct {
- Formatter string `json:"formatter,omitempty"`
- TextStyle TextStyle `json:"textStyle,omitempty"`
-}
-
-type DataItem struct {
- Name string `json:"name,omitempty"`
- Value float64 `json:"value,omitempty"`
-}
diff --git a/internal/db/query/budget.sql b/internal/db/query/budget.sql
deleted file mode 100644
index 1588575..0000000
--- a/internal/db/query/budget.sql
+++ /dev/null
@@ -1,35 +0,0 @@
--- name: CreateBudget :one
-INSERT INTO budgets (project_id, name, budget_type, category, start_at, end_at, amount, used_amount, remaining_amount, remark, created_user_id)
-VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)
-RETURNING *;
-
--- name: GetBudget :one
-SELECT *
-FROM budgets
-WHERE id = $1
-LIMIT 1;
-
--- name: UpdateBudget :one
-UPDATE budgets
-SET
- project_id = COALESCE(sqlc.narg(project_id), project_id),
- name = COALESCE(sqlc.narg(name), name),
- budget_type = COALESCE(sqlc.narg(budget_type), budget_type),
- category = COALESCE(sqlc.narg(category), category),
- start_at = COALESCE(sqlc.narg(start_at), start_at),
- end_at = COALESCE(sqlc.narg(end_at), end_at),
- amount = COALESCE(sqlc.narg(amount), amount),
- used_amount = COALESCE(sqlc.narg(used_amount), used_amount),
- remaining_amount = COALESCE(sqlc.narg(remaining_amount), remaining_amount),
- remark = COALESCE(sqlc.narg(remark), remark),
- status = COALESCE(sqlc.narg(status), status),
- updated_user_id = COALESCE(sqlc.narg(updated_user_id), updated_user_id),
- updated_at = NOW()
-WHERE id = $1
-RETURNING *;
-
--- name: ListBudgets :many
-SELECT *
-FROM budgets
-WHERE project_id = $1
-ORDER BY id;
\ No newline at end of file
diff --git a/internal/db/query/categroy.sql b/internal/db/query/categroy.sql
deleted file mode 100644
index eeb62d7..0000000
--- a/internal/db/query/categroy.sql
+++ /dev/null
@@ -1,84 +0,0 @@
--- name: CreateCategory :one
-INSERT INTO categories (
- name,
- icon,
- description,
- letter,
- parent_id,
- parent_path,
- status,
- sort
-)
-VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
-RETURNING *;
-
--- name: UpdateCategory :one
-UPDATE categories
-SET
- name = COALESCE(sqlc.narg(name), name),
- icon = COALESCE(sqlc.narg(icon), icon),
- description = COALESCE(sqlc.narg(description), description),
- letter = COALESCE(sqlc.narg(letter), letter),
- parent_id = COALESCE(sqlc.narg(parent_id), parent_id),
- parent_path = COALESCE(sqlc.narg(parent_path), parent_path),
- sort = COALESCE(sqlc.narg(sort), sort),
- status = COALESCE(sqlc.narg(status), status),
- updated_at = NOW()
-WHERE id = $1
-RETURNING *;
-
--- name: GetCategory :one
-SELECT *
-FROM categories
-WHERE id = $1
-LIMIT 1;
-
--- name: ListCategories :many
-SELECT * FROM categories
-WHERE status = 0;
-
--- name: ListCategoriesByPath :many
-SELECT * FROM categories
-WHERE parent_path LIKE $1
-AND status = 0
-ORDER BY sort DESC, id ASC;
-
--- name: CountCategoriesCondition :one
-SELECT COUNT(*) FROM categories
-WHERE (NOT @is_status::Boolean OR status = @status)
- AND (NOT @is_id::Boolean OR id = @id)
- AND (NOT @is_parent_id::Boolean OR parent_id = @parent_id)
- AND (@name::text = '' OR name ILIKE '%' || @name || '%');
-
--- name: ListCategoriesCondition :many
-SELECT * FROM categories
-WHERE (NOT @is_status::Boolean OR status = @status)
- AND (NOT @is_id::Boolean OR id = @id)
- AND (NOT @is_parent_id::Boolean OR parent_id = @parent_id)
- AND (@name::text = '' OR name ILIKE '%' || @name || '%')
-ORDER BY sort DESC, id ASC
-OFFSET @skip
-LIMIT @size;
-
--- name: AllCategories :many
-SELECT * FROM categories
-WHERE status = 0
-ORDER BY sort DESC, id ASC;
-
--- name: ExistsCategories :one
-SELECT EXISTS (
- SELECT 1 FROM categories
-);
-
--- name: ListCategoriesRecursive :many
-WITH RECURSIVE dist AS (SELECT categories.*
- FROM categories
- WHERE status = 0
- UNION ALL
- SELECT categories.*
- FROM categories,
- dist
- WHERE categories.id = dist.parent_id)
-SELECT DISTINCT *
-FROM dist
-ORDER BY sort DESC, id ASC;
\ No newline at end of file
diff --git a/internal/db/query/customer.sql b/internal/db/query/customer.sql
deleted file mode 100644
index fe86aa1..0000000
--- a/internal/db/query/customer.sql
+++ /dev/null
@@ -1,42 +0,0 @@
--- name: CreateCustomer :one
-INSERT INTO customers (id, name, category, source, address, contact_name, contact_phone, created_by)
-VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
-RETURNING *;
-
--- name: UpdateCustomer :one
-UPDATE customers
-SET
- name = COALESCE(sqlc.narg(name), name),
- category = COALESCE(sqlc.narg(category), category),
- source = COALESCE(sqlc.narg(source), source),
- address = COALESCE(sqlc.narg(address), address),
- contact_name = COALESCE(sqlc.narg(contact_name), contact_name),
- contact_phone = COALESCE(sqlc.narg(contact_phone), contact_phone),
- status = COALESCE(sqlc.narg(status), status),
- updated_by = COALESCE(sqlc.narg(updated_by), updated_by),
- updated_at = NOW()
-WHERE id = $1
-RETURNING *;
-
--- name: GetCustomer :one
-SELECT *
-FROM customers
-WHERE id = $1
-LIMIT 1;
-
--- name: AllCustomers :many
-SELECT * FROM customers
-WHERE status = 0
-ORDER BY id DESC;
-
--- name: CountCustomers :one
-SELECT COUNT(1)
-FROM customers
-WHERE status = 0;
-
--- name: ListCustomers :many
-SELECT *
-FROM customers
-WHERE status = 0
-ORDER BY id DESC
-LIMIT $1 OFFSET $2;
\ No newline at end of file
diff --git a/internal/db/query/expenses.sql b/internal/db/query/expenses.sql
deleted file mode 100644
index c3568b6..0000000
--- a/internal/db/query/expenses.sql
+++ /dev/null
@@ -1,47 +0,0 @@
--- name: CreateExpense :one
-INSERT INTO expenses (project_id, budget_id, amount, expenses_at, expenses_type, remark, status, created_user_id)
-VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
-RETURNING *;
-
--- name: UpdateExpense :one
-UPDATE expenses
-SET
- project_id = COALESCE(sqlc.narg(project_id), project_id),
- budget_id = COALESCE(sqlc.narg(budget_id), budget_id),
- amount = COALESCE(sqlc.narg(amount), amount),
- expenses_at = COALESCE(sqlc.narg(expenses_at), expenses_at),
- expenses_type = COALESCE(sqlc.narg(expenses_type), expenses_type),
- remark = COALESCE(sqlc.narg(remark), remark),
- status = COALESCE(sqlc.narg(status), status),
- updated_user_id = COALESCE(sqlc.narg(updated_user_id), updated_user_id),
- updated_at = NOW()
-WHERE id = $1
-RETURNING *;
-
--- name: GetExpense :one
-SELECT *
-FROM expenses
-WHERE id = $1
-LIMIT 1;
-
--- name: SumExpense :one
-SELECT SUM(amount)::numeric
-FROM expenses;
-
--- name: SumExpenseByProjectID :one
-SELECT SUM(amount)::numeric
-FROM expenses
-WHERE project_id = $1;
-
--- name: StatisticsExpense :many
-SELECT SUM(amount)::numeric as total_amount,
- (select name from categories where id = expenses.expenses_type) expenses_type_name
-FROM expenses
-GROUP BY expenses_type;
-
--- name: StatisticsExpenseByProjectID :many
-SELECT SUM(amount)::numeric as total_amount,
- (select name from categories where id = expenses.expenses_type) expenses_type_name
-FROM expenses
-WHERE project_id = $1
-GROUP BY expenses_type;
\ No newline at end of file
diff --git a/internal/db/query/income.sql b/internal/db/query/income.sql
deleted file mode 100644
index 4b67189..0000000
--- a/internal/db/query/income.sql
+++ /dev/null
@@ -1,48 +0,0 @@
--- name: CreateIncome :one
-INSERT INTO incomes (project_id, budget_id, amount, income_at, income_type, income_bank, remark, status, created_user_id)
-VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
-RETURNING *;
-
--- name: UpdateIncome :one
-UPDATE incomes
-SET
- project_id = COALESCE(sqlc.narg(project_id), project_id),
- budget_id = COALESCE(sqlc.narg(budget_id), budget_id),
- amount = COALESCE(sqlc.narg(amount), amount),
- income_at = COALESCE(sqlc.narg(income_at), income_at),
- income_type = COALESCE(sqlc.narg(income_type), income_type),
- income_bank = COALESCE(sqlc.narg(income_bank), income_bank),
- remark = COALESCE(sqlc.narg(remark), remark),
- status = COALESCE(sqlc.narg(status), status),
- updated_user_id = COALESCE(sqlc.narg(updated_user_id), updated_user_id),
- updated_at = NOW()
-WHERE id = $1
-RETURNING *;
-
--- name: GetIncome :one
-SELECT *
-FROM incomes
-WHERE id = $1
-LIMIT 1;
-
--- name: SumIncome :one
-SELECT SUM(amount)::numeric
-FROM incomes;
-
--- name: SumIncomeByProjectID :one
-SELECT SUM(amount)::numeric
-FROM incomes
-WHERE project_id = $1;
-
--- name: StatisticsIncome :many
-SELECT SUM(amount)::numeric as total_amount,
- (select name from categories where id = incomes.income_type) income_type_name
-FROM incomes
-GROUP BY income_type;
-
--- name: StatisticsIncomeByProjectID :many
-SELECT SUM(amount)::numeric as total_amount,
- (select name from categories where id = incomes.income_type) income_type_name
-FROM incomes
-WHERE project_id = $1
-GROUP BY income_type;
\ No newline at end of file
diff --git a/internal/db/query/project.sql b/internal/db/query/project.sql
deleted file mode 100644
index e9d1310..0000000
--- a/internal/db/query/project.sql
+++ /dev/null
@@ -1,59 +0,0 @@
--- name: CreateProject :one
-INSERT INTO projects (id, name, start_at, end_at, customer_id, total_money, description, apply_at, apply_user_id, manager_id, members, status, created_user_id)
-VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)
-RETURNING *;
-
--- name: UpdateProject :one
-UPDATE projects
-SET
- name = COALESCE(sqlc.narg(name), name),
- start_at = COALESCE(sqlc.narg(start_at), start_at),
- end_at = COALESCE(sqlc.narg(end_at), end_at),
- customer_id = COALESCE(sqlc.narg(customer_id), customer_id),
- total_money = COALESCE(sqlc.narg(total_money), total_money),
- description = COALESCE(sqlc.narg(description), description),
- apply_at = COALESCE(sqlc.narg(apply_at), apply_at),
- apply_user_id = COALESCE(sqlc.narg(apply_user_id), apply_user_id),
- manager_id = COALESCE(sqlc.narg(manager_id), manager_id),
- members = COALESCE(sqlc.narg(members), members),
- status = COALESCE(sqlc.narg(status), status),
- updated_user_id = COALESCE(sqlc.narg(updated_user_id), updated_user_id),
- updated_at = NOW()
-WHERE id = $1
-RETURNING *;
-
--- name: GetProject :one
-SELECT *
-FROM projects
-WHERE id = $1
-LIMIT 1;
-
--- name: AllProjects :many
-SELECT * FROM projects
-WHERE status > -1
-ORDER BY id DESC;
-
--- name: CountProjects :one
-SELECT COUNT(1)
-FROM projects
-WHERE status = $1;
-
--- name: ListProjects :many
-SELECT *
-FROM projects
-WHERE status = $1
-ORDER BY id DESC
-LIMIT $1 OFFSET $2;
-
--- name: StatisticsProjects :many
-select name,
- (select sum(amount)::numeric from incomes where project_id = projects.id) income,
- (select sum(amount)::numeric from expenses where project_id = projects.id) expense
-from projects;
-
--- name: StatisticsProjectItem :one
-select name,
- (select sum(amount)::numeric from incomes where project_id = projects.id) income,
- (select sum(amount)::numeric from expenses where project_id = projects.id) expense
-from projects
-where projects.id = $1;
\ No newline at end of file
diff --git a/internal/db/query/project_file.sql b/internal/db/query/project_file.sql
deleted file mode 100644
index 5af192e..0000000
--- a/internal/db/query/project_file.sql
+++ /dev/null
@@ -1,14 +0,0 @@
--- name: CreateProjectFile :one
-INSERT INTO project_files (id, name, path, project_id, created_user_id)
-VALUES($1, $2, $3, $4, $5)
-RETURNING *;
-
--- name: DeleteProjectFile :exec
-DELETE FROM project_files
-WHERE project_id = $1;
-
--- name: ListProjectFiles :many
-SELECT *
-FROM project_files
-WHERE project_id = $1
-ORDER BY id;
\ No newline at end of file
diff --git a/internal/db/query/sys_audit_log.sql b/internal/db/query/sys_audit_log.sql
deleted file mode 100644
index f520951..0000000
--- a/internal/db/query/sys_audit_log.sql
+++ /dev/null
@@ -1,32 +0,0 @@
--- name: CreateSysAuditLog :exec
-INSERT INTO sys_audit_log (created_at,
- email,
- username,
- user_uuid,
- start_at,
- end_at,
- duration,
- url,
- method,
- parameters,
- referer_url,
- os,
- ip,
- browser,
- remark)
-VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15);
-
--- name: CountSysAuditLogCondition :one
-SELECT COUNT(*) FROM sys_audit_log
-WHERE created_at BETWEEN @start_at AND @end_at
- AND (@email::text = '' OR email ILIKE '%' || @email || '%')
- AND (@username::text = '' OR username ILIKE '%' || @username || '%');
-
--- name: ListSysAuditLogCondition :many
-SELECT * FROM sys_audit_log
-WHERE created_at BETWEEN @start_at AND @end_at
- AND (@email::text = '' OR email ILIKE '%' || @email || '%')
- AND (@username::text = '' OR username ILIKE '%' || @username || '%')
-ORDER BY created_at DESC
-OFFSET @skip
-LIMIT @size;
\ No newline at end of file
diff --git a/internal/db/query/sys_config.sql b/internal/db/query/sys_config.sql
deleted file mode 100644
index 82a9856..0000000
--- a/internal/db/query/sys_config.sql
+++ /dev/null
@@ -1,41 +0,0 @@
--- name: CreateSysConfig :exec
-INSERT INTO sys_config (
- key,
- value
-) VALUES (
- $1, $2
-);
-
--- name: GetSysConfig :one
-SELECT *
-FROM sys_config
-WHERE id = $1
-LIMIT 1;
-
--- name: GetSysConfigByKey :one
-SELECT *
-FROM sys_config
-WHERE key = $1
-LIMIT 1;
-
--- name: UpdateSysConfigByKey :exec
-UPDATE sys_config
-SET value = $2
-WHERE key = $1;
-
--- name: ExistsSysConfigByKey :one
-SELECT EXISTS (
- SELECT 1 FROM sys_config WHERE key = $1
-);
-
--- name: CountSysConfigCondition :one
-SELECT COUNT(*) FROM sys_config
-WHERE (@key::text = '' OR key ILIKE '%' || @key || '%');
-
--- name: ListSysConfigCondition :many
-SELECT *
-FROM sys_config
-WHERE (@key::text = '' OR key ILIKE '%' || @key || '%')
-ORDER BY created_at DESC
-OFFSET @skip
-LIMIT @size;
\ No newline at end of file
diff --git a/internal/db/query/sys_department.sql b/internal/db/query/sys_department.sql
deleted file mode 100644
index 3fd8a4b..0000000
--- a/internal/db/query/sys_department.sql
+++ /dev/null
@@ -1,71 +0,0 @@
--- name: CreateSysDepartment :one
-INSERT INTO sys_department (
- name,
- parent_id,
- parent_path,
- status,
- sort,
- created_at,
- updated_at
-) VALUES (
- $1, $2, $3, $4, $5, $6, $7
-) RETURNING *;
-
--- name: UpdateSysDepartment :one
-UPDATE sys_department
-SET name = $2,
- parent_id = $3,
- parent_path = $4,
- status = $5,
- sort = $6,
- updated_at = $7
-WHERE id = $1
-RETURNING *;
-
--- name: GetSysDepartment :one
-SELECT * FROM sys_department
-WHERE id = $1 LIMIT 1;
-
--- name: ListSysDepartment :many
-SELECT * FROM sys_department
-WHERE status = 0;
-
--- name: CountSysDepartmentCondition :one
-SELECT COUNT(*) FROM sys_department
-WHERE (NOT @is_status::Boolean OR status = @status)
- AND (NOT @is_id::Boolean OR id = @id)
- AND (NOT @is_parent_id::Boolean OR parent_id = @parent_id)
- AND (@name::text = '' OR name ILIKE '%' || @name || '%');
-
--- name: ListSysDepartmentCondition :many
-SELECT * FROM sys_department
-WHERE (NOT @is_status::Boolean OR status = @status)
- AND (NOT @is_id::Boolean OR id = @id)
- AND (NOT @is_parent_id::Boolean OR parent_id = @parent_id)
- AND (@name::text = '' OR name ILIKE '%' || @name || '%')
-ORDER BY created_at DESC
-OFFSET @skip
-LIMIT @size;
-
--- name: AllSysDepartment :many
-SELECT * FROM sys_department
-WHERE status = 0
-ORDER BY sort DESC;
-
--- name: ExistsSysDepartment :one
-SELECT EXISTS (
- SELECT 1 FROM sys_department
-);
-
--- name: ListSysDepartmentRecursive :many
-WITH RECURSIVE dist AS (SELECT sys_department.*
- FROM sys_department
- WHERE status = 0
- UNION ALL
- SELECT sys_department.*
- FROM sys_department,
- dist
- WHERE sys_department.id = dist.parent_id)
-SELECT DISTINCT *
-FROM dist
-ORDER BY sort DESC;
\ No newline at end of file
diff --git a/internal/db/query/sys_menu.sql b/internal/db/query/sys_menu.sql
deleted file mode 100644
index 5aaa9f4..0000000
--- a/internal/db/query/sys_menu.sql
+++ /dev/null
@@ -1,97 +0,0 @@
--- name: CreateSysMenu :one
-INSERT INTO sys_menu (
- name,
- display_name,
- url,
- type,
- parent_id,
- parent_path,
- avatar,
- style,
- visible,
- is_list,
- status,
- sort,
- created_at,
- updated_at
-) VALUES (
- $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14
-) RETURNING *;
-
--- name: UpdateSysMenu :one
-UPDATE sys_menu
-SET name = $2,
- display_name = $3,
- url = $4,
- type = $5,
- parent_id = $6,
- parent_path = $7,
- avatar = $8,
- style = $9,
- visible = $10,
- is_list = $11,
- status = $12,
- sort = $13,
- updated_at = $14
-WHERE id = $1
-RETURNING *;
-
--- name: GetSysMenu :one
-SELECT * FROM sys_menu
-WHERE id = $1 LIMIT 1;
-
--- name: GetSysMenuByUrl :one
-SELECT * FROM sys_menu
-WHERE url = $1 LIMIT 1;
-
--- name: AllSysMenu :many
-SELECT * FROM sys_menu
-WHERE status = 0
-ORDER BY sort DESC;
-
--- name: ListSysMenuByRoleID :many
-SELECT * FROM sys_menu
-WHERE id IN (SELECT menu_id
- FROM sys_role_menu
- WHERE role_id = $1);
-
--- name: ListSysMenuIDByRoleID :many
-SELECT menu_id
-FROM sys_role_menu
-WHERE role_id = $1;
-
--- name: ExistsMenu :one
-SELECT EXISTS (
- SELECT 1 FROM sys_menu
-);
-
--- name: RecursiveSysMenus :many
-WITH RECURSIVE dist AS (SELECT sys_menu.*
- FROM sys_menu
- WHERE status = 0
- AND is_list = true
- UNION ALL
- SELECT sys_menu.*
- FROM sys_menu,
- dist
- WHERE sys_menu.id = dist.parent_id)
-SELECT *
-FROM dist
-ORDER BY dist.sort DESC, dist.id ASC;
-
--- name: RecursiveSysMenusByRoleID :many
-WITH RECURSIVE dist AS (SELECT sys_menu.*
- FROM sys_menu
- WHERE status = 0
- AND is_list = true
- AND id IN (SELECT menu_id
- FROM sys_role_menu
- WHERE role_id = $1)
- UNION ALL
- SELECT sys_menu.*
- FROM sys_menu,
- dist
- WHERE sys_menu.id = dist.parent_id)
-SELECT *
-FROM dist
-ORDER BY dist.sort DESC, dist.id ASC;
\ No newline at end of file
diff --git a/internal/db/query/sys_role.sql b/internal/db/query/sys_role.sql
deleted file mode 100644
index 6f01bd6..0000000
--- a/internal/db/query/sys_role.sql
+++ /dev/null
@@ -1,77 +0,0 @@
--- name: CreateSysRole :one
-INSERT INTO sys_role (
- name,
- display_name,
- vip,
- parent_id,
- parent_path,
- status,
- sort,
- created_at,
- updated_at
-) VALUES (
- $1, $2, $3, $4, $5, $6, $7, $8, $9
-) RETURNING *;
-
--- name: UpdateSysRole :one
-UPDATE sys_role
-SET display_name = $2,
- status = $3,
- parent_id = $4,
- parent_path = $5,
- sort = $6,
- updated_at = $7
-WHERE id = $1
-RETURNING *;
-
--- name: GetSysRole :one
-SELECT * FROM sys_role
-WHERE id = $1 LIMIT 1;
-
--- name: CountSysRole :one
-SELECT count(*) FROM sys_role
-WHERE status = 0;
-
--- name: ListSysRole :many
-SELECT * FROM sys_role
-WHERE status = 0;
-
--- name: AllSysRole :many
-SELECT * FROM sys_role
-WHERE status = 0
-ORDER BY sort DESC;
-
--- name: GetSysRoleByUserID :one
-SELECT * FROM sys_role
-WHERE id = (SELECT role_id
- FROM sys_user
- WHERE sys_user.id = $1);
-
--- name: ExistsVipRole :one
-SELECT EXISTS (
- SELECT 1 FROM sys_role
- WHERE vip = true
-);
-
--- name: GetFirstVipRole :one
-SELECT * FROM sys_role
-WHERE vip = true
-ORDER BY id ASC
-LIMIT 1;
-
--- name: CountSysRoleCondition :one
-SELECT COUNT(*) FROM sys_role
-WHERE (NOT @is_status::Boolean OR status = @status)
- AND (NOT @is_id::Boolean OR id = @id)
- AND (NOT @is_parent_id::Boolean OR parent_id = @parent_id)
- AND (@display_name::text = '' OR display_name ILIKE '%' || @display_name || '%');
-
--- name: ListSysRoleCondition :many
-SELECT * FROM sys_role
-WHERE (NOT @is_status::Boolean OR status = @status)
- AND (NOT @is_id::Boolean OR id = @id)
- AND (NOT @is_parent_id::Boolean OR parent_id = @parent_id)
- AND (@display_name::text = '' OR display_name ILIKE '%' || @display_name || '%')
-ORDER BY created_at DESC
-OFFSET @skip
-LIMIT @size;
\ No newline at end of file
diff --git a/internal/db/query/sys_role_menu.sql b/internal/db/query/sys_role_menu.sql
deleted file mode 100644
index 8289ec4..0000000
--- a/internal/db/query/sys_role_menu.sql
+++ /dev/null
@@ -1,11 +0,0 @@
--- name: DeleteRoleMneuByRoleID :exec
-DELETE FROM sys_role_menu
-WHERE role_id = $1;
-
--- name: CreateRoleMenu :exec
-INSERT INTO sys_role_menu (
- role_id,
- menu_id
-) VALUES (
- $1, $2
-);
\ No newline at end of file
diff --git a/internal/db/query/sys_user.sql b/internal/db/query/sys_user.sql
deleted file mode 100644
index 635da08..0000000
--- a/internal/db/query/sys_user.sql
+++ /dev/null
@@ -1,91 +0,0 @@
--- name: CreateSysUser :one
-INSERT INTO sys_user (
- uuid,
- email,
- username,
- hashed_password,
- salt,
- avatar,
- gender,
- department_id,
- role_id,
- status,
- change_password_at,
- created_at,
- updated_at
-) VALUES (
- $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13
-) RETURNING *;
-
--- name: UpdateSysUser :one
-UPDATE sys_user
-SET username = $2,
- hashed_password = $3,
- avatar = $4,
- gender = $5,
- department_id = $6,
- role_id = $7,
- status = $8,
- change_password_at = $9,
- updated_at = $10
-WHERE id = $1
-RETURNING *;
-
--- name: GetSysUser :one
-SELECT * FROM sys_user
-WHERE id = $1 LIMIT 1;
-
--- name: GetSysUserByEmail :one
-SELECT * FROM sys_user
-WHERE email = $1 LIMIT 1;
-
--- name: CountSysUser :one
-SELECT COUNT(*) FROM sys_user
-WHERE status = 0;
-
--- name: ListSysUser :many
-SELECT * FROM sys_user
-WHERE status = 0
-ORDER BY created_at DESC;
-
--- name: CountSysUserCondition :one
-SELECT COUNT(*) FROM sys_user
-WHERE (NOT @is_status::Boolean OR status = @status)
- AND (NOT @is_id::Boolean OR id = @id)
- AND (@username::text = '' OR username ILIKE '%' || @username || '%')
- AND (@email::text = '' OR email ILIKE '%' || @email || '%');
-
--- name: ListSysUserCondition :many
-SELECT id,
- uuid,
- email,
- username,
- avatar,
- gender,
- department_id,
- role_id,
- status,
- change_password_at,
- created_at,
- updated_at,
- COALESCE((SELECT name FROM sys_department WHERE ID = sys_user.department_id), '') AS department_name,
- COALESCE((SELECT display_name
- FROM sys_role
- WHERE id = sys_user.role_id), '') AS role_name
-FROM sys_user
-WHERE (NOT @is_status::Boolean OR sys_user.status = @status)
- AND (NOT @is_id::Boolean OR sys_user.id = @id)
- AND (@username::text = '' OR sys_user.username ILIKE '%' || @username || '%')
- AND (@email::text = '' OR sys_user.email ILIKE '%' || @email || '%')
-ORDER BY created_at DESC
-OFFSET @skip
-LIMIT @size;
-
--- name: ExistsSysUser :one
-SELECT EXISTS (
- SELECT 1 FROM sys_user
-);
-
--- name: ListSysUserByIds :many
-SELECT * FROM sys_user
-WHERE id = ANY($1::int[]);
\ No newline at end of file
diff --git a/internal/db/query/sys_user_login_log.sql b/internal/db/query/sys_user_login_log.sql
deleted file mode 100644
index 4172735..0000000
--- a/internal/db/query/sys_user_login_log.sql
+++ /dev/null
@@ -1,41 +0,0 @@
--- name: CreateSysUserLoginLog :exec
-INSERT INTO sys_user_login_log (created_at,
- email,
- username,
- user_uuid,
- is_success,
- message,
- referer_url,
- url,
- os,
- ip,
- browser)
-VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11);
-
--- name: CountSysUserLoginLogCondition :one
-SELECT COUNT(*) FROM sys_user_login_log
-WHERE created_at BETWEEN @start_at AND @end_at
- AND (@email::text = '' OR email ILIKE '%' || @email || '%')
- AND (@username::text = '' OR username ILIKE '%' || @username || '%');
-
--- name: ListSysUserLoginLogCondition :many
-SELECT
- id,
- created_at,
- email,
- COALESCE((SELECT username FROM sys_user WHERE email = sys_user_login_log.email LIMIT 1), '') AS username,
- user_uuid,
- is_success,
- message,
- referer_url,
- url,
- os,
- ip,
- browser
-FROM sys_user_login_log
-WHERE sys_user_login_log.created_at BETWEEN @start_at AND @end_at
- AND (@email::text = '' OR email ILIKE '%' || @email || '%')
- AND (@username::text = '' OR username ILIKE '%' || @username || '%')
-ORDER BY created_at DESC
-OFFSET @skip
-LIMIT @size;
\ No newline at end of file
diff --git a/internal/db/sqlc/budget.sql.go b/internal/db/sqlc/budget.sql.go
deleted file mode 100644
index 5613f42..0000000
--- a/internal/db/sqlc/budget.sql.go
+++ /dev/null
@@ -1,222 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: budget.sql
-
-package db
-
-import (
- "context"
- "time"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-const createBudget = `-- name: CreateBudget :one
-INSERT INTO budgets (project_id, name, budget_type, category, start_at, end_at, amount, used_amount, remaining_amount, remark, created_user_id)
-VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)
-RETURNING id, project_id, name, budget_type, category, start_at, end_at, amount, used_amount, remaining_amount, remark, status, sort, created_at, created_user_id, updated_at, updated_user_id
-`
-
-type CreateBudgetParams struct {
- ProjectID int64 `json:"project_id"`
- Name string `json:"name"`
- BudgetType int32 `json:"budget_type"`
- Category int32 `json:"category"`
- StartAt time.Time `json:"start_at"`
- EndAt time.Time `json:"end_at"`
- Amount pgtype.Numeric `json:"amount"`
- UsedAmount pgtype.Numeric `json:"used_amount"`
- RemainingAmount pgtype.Numeric `json:"remaining_amount"`
- Remark string `json:"remark"`
- CreatedUserID int32 `json:"created_user_id"`
-}
-
-func (q *Queries) CreateBudget(ctx context.Context, arg *CreateBudgetParams) (*Budget, error) {
- row := q.db.QueryRow(ctx, createBudget,
- arg.ProjectID,
- arg.Name,
- arg.BudgetType,
- arg.Category,
- arg.StartAt,
- arg.EndAt,
- arg.Amount,
- arg.UsedAmount,
- arg.RemainingAmount,
- arg.Remark,
- arg.CreatedUserID,
- )
- var i Budget
- err := row.Scan(
- &i.ID,
- &i.ProjectID,
- &i.Name,
- &i.BudgetType,
- &i.Category,
- &i.StartAt,
- &i.EndAt,
- &i.Amount,
- &i.UsedAmount,
- &i.RemainingAmount,
- &i.Remark,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- )
- return &i, err
-}
-
-const getBudget = `-- name: GetBudget :one
-SELECT id, project_id, name, budget_type, category, start_at, end_at, amount, used_amount, remaining_amount, remark, status, sort, created_at, created_user_id, updated_at, updated_user_id
-FROM budgets
-WHERE id = $1
-LIMIT 1
-`
-
-func (q *Queries) GetBudget(ctx context.Context, id int64) (*Budget, error) {
- row := q.db.QueryRow(ctx, getBudget, id)
- var i Budget
- err := row.Scan(
- &i.ID,
- &i.ProjectID,
- &i.Name,
- &i.BudgetType,
- &i.Category,
- &i.StartAt,
- &i.EndAt,
- &i.Amount,
- &i.UsedAmount,
- &i.RemainingAmount,
- &i.Remark,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- )
- return &i, err
-}
-
-const listBudgets = `-- name: ListBudgets :many
-SELECT id, project_id, name, budget_type, category, start_at, end_at, amount, used_amount, remaining_amount, remark, status, sort, created_at, created_user_id, updated_at, updated_user_id
-FROM budgets
-WHERE project_id = $1
-ORDER BY id
-`
-
-func (q *Queries) ListBudgets(ctx context.Context, projectID int64) ([]*Budget, error) {
- rows, err := q.db.Query(ctx, listBudgets, projectID)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*Budget{}
- for rows.Next() {
- var i Budget
- if err := rows.Scan(
- &i.ID,
- &i.ProjectID,
- &i.Name,
- &i.BudgetType,
- &i.Category,
- &i.StartAt,
- &i.EndAt,
- &i.Amount,
- &i.UsedAmount,
- &i.RemainingAmount,
- &i.Remark,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const updateBudget = `-- name: UpdateBudget :one
-UPDATE budgets
-SET
- project_id = COALESCE($2, project_id),
- name = COALESCE($3, name),
- budget_type = COALESCE($4, budget_type),
- category = COALESCE($5, category),
- start_at = COALESCE($6, start_at),
- end_at = COALESCE($7, end_at),
- amount = COALESCE($8, amount),
- used_amount = COALESCE($9, used_amount),
- remaining_amount = COALESCE($10, remaining_amount),
- remark = COALESCE($11, remark),
- status = COALESCE($12, status),
- updated_user_id = COALESCE($13, updated_user_id),
- updated_at = NOW()
-WHERE id = $1
-RETURNING id, project_id, name, budget_type, category, start_at, end_at, amount, used_amount, remaining_amount, remark, status, sort, created_at, created_user_id, updated_at, updated_user_id
-`
-
-type UpdateBudgetParams struct {
- ID int64 `json:"id"`
- ProjectID pgtype.Int8 `json:"project_id"`
- Name pgtype.Text `json:"name"`
- BudgetType pgtype.Int4 `json:"budget_type"`
- Category pgtype.Int4 `json:"category"`
- StartAt pgtype.Timestamptz `json:"start_at"`
- EndAt pgtype.Timestamptz `json:"end_at"`
- Amount pgtype.Numeric `json:"amount"`
- UsedAmount pgtype.Numeric `json:"used_amount"`
- RemainingAmount pgtype.Numeric `json:"remaining_amount"`
- Remark pgtype.Text `json:"remark"`
- Status pgtype.Int2 `json:"status"`
- UpdatedUserID pgtype.Int4 `json:"updated_user_id"`
-}
-
-func (q *Queries) UpdateBudget(ctx context.Context, arg *UpdateBudgetParams) (*Budget, error) {
- row := q.db.QueryRow(ctx, updateBudget,
- arg.ID,
- arg.ProjectID,
- arg.Name,
- arg.BudgetType,
- arg.Category,
- arg.StartAt,
- arg.EndAt,
- arg.Amount,
- arg.UsedAmount,
- arg.RemainingAmount,
- arg.Remark,
- arg.Status,
- arg.UpdatedUserID,
- )
- var i Budget
- err := row.Scan(
- &i.ID,
- &i.ProjectID,
- &i.Name,
- &i.BudgetType,
- &i.Category,
- &i.StartAt,
- &i.EndAt,
- &i.Amount,
- &i.UsedAmount,
- &i.RemainingAmount,
- &i.Remark,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- )
- return &i, err
-}
diff --git a/internal/db/sqlc/categroy.sql.go b/internal/db/sqlc/categroy.sql.go
deleted file mode 100644
index 78af4b8..0000000
--- a/internal/db/sqlc/categroy.sql.go
+++ /dev/null
@@ -1,435 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: categroy.sql
-
-package db
-
-import (
- "context"
- "time"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-const allCategories = `-- name: AllCategories :many
-SELECT id, name, icon, description, letter, parent_id, parent_path, status, sort, created_at, updated_at FROM categories
-WHERE status = 0
-ORDER BY sort DESC, id ASC
-`
-
-func (q *Queries) AllCategories(ctx context.Context) ([]*Category, error) {
- rows, err := q.db.Query(ctx, allCategories)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*Category{}
- for rows.Next() {
- var i Category
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.Icon,
- &i.Description,
- &i.Letter,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const countCategoriesCondition = `-- name: CountCategoriesCondition :one
-SELECT COUNT(*) FROM categories
-WHERE (NOT $1::Boolean OR status = $2)
- AND (NOT $3::Boolean OR id = $4)
- AND (NOT $5::Boolean OR parent_id = $6)
- AND ($7::text = '' OR name ILIKE '%' || $7 || '%')
-`
-
-type CountCategoriesConditionParams struct {
- IsStatus bool `json:"is_status"`
- Status int16 `json:"status"`
- IsID bool `json:"is_id"`
- ID int32 `json:"id"`
- IsParentID bool `json:"is_parent_id"`
- ParentID int32 `json:"parent_id"`
- Name string `json:"name"`
-}
-
-func (q *Queries) CountCategoriesCondition(ctx context.Context, arg *CountCategoriesConditionParams) (int64, error) {
- row := q.db.QueryRow(ctx, countCategoriesCondition,
- arg.IsStatus,
- arg.Status,
- arg.IsID,
- arg.ID,
- arg.IsParentID,
- arg.ParentID,
- arg.Name,
- )
- var count int64
- err := row.Scan(&count)
- return count, err
-}
-
-const createCategory = `-- name: CreateCategory :one
-INSERT INTO categories (
- name,
- icon,
- description,
- letter,
- parent_id,
- parent_path,
- status,
- sort
-)
-VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
-RETURNING id, name, icon, description, letter, parent_id, parent_path, status, sort, created_at, updated_at
-`
-
-type CreateCategoryParams struct {
- Name string `json:"name"`
- Icon string `json:"icon"`
- Description string `json:"description"`
- Letter string `json:"letter"`
- ParentID int32 `json:"parent_id"`
- ParentPath string `json:"parent_path"`
- Status int16 `json:"status"`
- Sort int32 `json:"sort"`
-}
-
-func (q *Queries) CreateCategory(ctx context.Context, arg *CreateCategoryParams) (*Category, error) {
- row := q.db.QueryRow(ctx, createCategory,
- arg.Name,
- arg.Icon,
- arg.Description,
- arg.Letter,
- arg.ParentID,
- arg.ParentPath,
- arg.Status,
- arg.Sort,
- )
- var i Category
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.Icon,
- &i.Description,
- &i.Letter,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const existsCategories = `-- name: ExistsCategories :one
-SELECT EXISTS (
- SELECT 1 FROM categories
-)
-`
-
-func (q *Queries) ExistsCategories(ctx context.Context) (bool, error) {
- row := q.db.QueryRow(ctx, existsCategories)
- var exists bool
- err := row.Scan(&exists)
- return exists, err
-}
-
-const getCategory = `-- name: GetCategory :one
-SELECT id, name, icon, description, letter, parent_id, parent_path, status, sort, created_at, updated_at
-FROM categories
-WHERE id = $1
-LIMIT 1
-`
-
-func (q *Queries) GetCategory(ctx context.Context, id int32) (*Category, error) {
- row := q.db.QueryRow(ctx, getCategory, id)
- var i Category
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.Icon,
- &i.Description,
- &i.Letter,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const listCategories = `-- name: ListCategories :many
-SELECT id, name, icon, description, letter, parent_id, parent_path, status, sort, created_at, updated_at FROM categories
-WHERE status = 0
-`
-
-func (q *Queries) ListCategories(ctx context.Context) ([]*Category, error) {
- rows, err := q.db.Query(ctx, listCategories)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*Category{}
- for rows.Next() {
- var i Category
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.Icon,
- &i.Description,
- &i.Letter,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const listCategoriesByPath = `-- name: ListCategoriesByPath :many
-SELECT id, name, icon, description, letter, parent_id, parent_path, status, sort, created_at, updated_at FROM categories
-WHERE parent_path LIKE $1
-AND status = 0
-ORDER BY sort DESC, id ASC
-`
-
-func (q *Queries) ListCategoriesByPath(ctx context.Context, parentPath string) ([]*Category, error) {
- rows, err := q.db.Query(ctx, listCategoriesByPath, parentPath)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*Category{}
- for rows.Next() {
- var i Category
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.Icon,
- &i.Description,
- &i.Letter,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const listCategoriesCondition = `-- name: ListCategoriesCondition :many
-SELECT id, name, icon, description, letter, parent_id, parent_path, status, sort, created_at, updated_at FROM categories
-WHERE (NOT $1::Boolean OR status = $2)
- AND (NOT $3::Boolean OR id = $4)
- AND (NOT $5::Boolean OR parent_id = $6)
- AND ($7::text = '' OR name ILIKE '%' || $7 || '%')
-ORDER BY sort DESC, id ASC
-OFFSET $8
-LIMIT $9
-`
-
-type ListCategoriesConditionParams struct {
- IsStatus bool `json:"is_status"`
- Status int16 `json:"status"`
- IsID bool `json:"is_id"`
- ID int32 `json:"id"`
- IsParentID bool `json:"is_parent_id"`
- ParentID int32 `json:"parent_id"`
- Name string `json:"name"`
- Skip int32 `json:"skip"`
- Size int32 `json:"size"`
-}
-
-func (q *Queries) ListCategoriesCondition(ctx context.Context, arg *ListCategoriesConditionParams) ([]*Category, error) {
- rows, err := q.db.Query(ctx, listCategoriesCondition,
- arg.IsStatus,
- arg.Status,
- arg.IsID,
- arg.ID,
- arg.IsParentID,
- arg.ParentID,
- arg.Name,
- arg.Skip,
- arg.Size,
- )
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*Category{}
- for rows.Next() {
- var i Category
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.Icon,
- &i.Description,
- &i.Letter,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const listCategoriesRecursive = `-- name: ListCategoriesRecursive :many
-WITH RECURSIVE dist AS (SELECT categories.id, categories.name, categories.icon, categories.description, categories.letter, categories.parent_id, categories.parent_path, categories.status, categories.sort, categories.created_at, categories.updated_at
- FROM categories
- WHERE status = 0
- UNION ALL
- SELECT categories.id, categories.name, categories.icon, categories.description, categories.letter, categories.parent_id, categories.parent_path, categories.status, categories.sort, categories.created_at, categories.updated_at
- FROM categories,
- dist
- WHERE categories.id = dist.parent_id)
-SELECT DISTINCT id, name, icon, description, letter, parent_id, parent_path, status, sort, created_at, updated_at
-FROM dist
-ORDER BY sort DESC, id ASC
-`
-
-type ListCategoriesRecursiveRow struct {
- ID int32 `json:"id"`
- Name string `json:"name"`
- Icon string `json:"icon"`
- Description string `json:"description"`
- Letter string `json:"letter"`
- ParentID int32 `json:"parent_id"`
- ParentPath string `json:"parent_path"`
- Status int16 `json:"status"`
- Sort int32 `json:"sort"`
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-func (q *Queries) ListCategoriesRecursive(ctx context.Context) ([]*ListCategoriesRecursiveRow, error) {
- rows, err := q.db.Query(ctx, listCategoriesRecursive)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*ListCategoriesRecursiveRow{}
- for rows.Next() {
- var i ListCategoriesRecursiveRow
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.Icon,
- &i.Description,
- &i.Letter,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const updateCategory = `-- name: UpdateCategory :one
-UPDATE categories
-SET
- name = COALESCE($2, name),
- icon = COALESCE($3, icon),
- description = COALESCE($4, description),
- letter = COALESCE($5, letter),
- parent_id = COALESCE($6, parent_id),
- parent_path = COALESCE($7, parent_path),
- sort = COALESCE($8, sort),
- status = COALESCE($9, status),
- updated_at = NOW()
-WHERE id = $1
-RETURNING id, name, icon, description, letter, parent_id, parent_path, status, sort, created_at, updated_at
-`
-
-type UpdateCategoryParams struct {
- ID int32 `json:"id"`
- Name pgtype.Text `json:"name"`
- Icon pgtype.Text `json:"icon"`
- Description pgtype.Text `json:"description"`
- Letter pgtype.Text `json:"letter"`
- ParentID pgtype.Int4 `json:"parent_id"`
- ParentPath pgtype.Text `json:"parent_path"`
- Sort pgtype.Int4 `json:"sort"`
- Status pgtype.Int2 `json:"status"`
-}
-
-func (q *Queries) UpdateCategory(ctx context.Context, arg *UpdateCategoryParams) (*Category, error) {
- row := q.db.QueryRow(ctx, updateCategory,
- arg.ID,
- arg.Name,
- arg.Icon,
- arg.Description,
- arg.Letter,
- arg.ParentID,
- arg.ParentPath,
- arg.Sort,
- arg.Status,
- )
- var i Category
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.Icon,
- &i.Description,
- &i.Letter,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
diff --git a/internal/db/sqlc/customer.sql.go b/internal/db/sqlc/customer.sql.go
deleted file mode 100644
index 34f0be6..0000000
--- a/internal/db/sqlc/customer.sql.go
+++ /dev/null
@@ -1,246 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: customer.sql
-
-package db
-
-import (
- "context"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-const allCustomers = `-- name: AllCustomers :many
-SELECT id, name, category, source, address, contact_name, contact_phone, status, sort, created_at, created_by, updated_at, updated_by FROM customers
-WHERE status = 0
-ORDER BY id DESC
-`
-
-func (q *Queries) AllCustomers(ctx context.Context) ([]*Customer, error) {
- rows, err := q.db.Query(ctx, allCustomers)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*Customer{}
- for rows.Next() {
- var i Customer
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.Category,
- &i.Source,
- &i.Address,
- &i.ContactName,
- &i.ContactPhone,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedBy,
- &i.UpdatedAt,
- &i.UpdatedBy,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const countCustomers = `-- name: CountCustomers :one
-SELECT COUNT(1)
-FROM customers
-WHERE status = 0
-`
-
-func (q *Queries) CountCustomers(ctx context.Context) (int64, error) {
- row := q.db.QueryRow(ctx, countCustomers)
- var count int64
- err := row.Scan(&count)
- return count, err
-}
-
-const createCustomer = `-- name: CreateCustomer :one
-INSERT INTO customers (id, name, category, source, address, contact_name, contact_phone, created_by)
-VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
-RETURNING id, name, category, source, address, contact_name, contact_phone, status, sort, created_at, created_by, updated_at, updated_by
-`
-
-type CreateCustomerParams struct {
- ID int64 `json:"id"`
- Name string `json:"name"`
- Category int32 `json:"category"`
- Source int32 `json:"source"`
- Address string `json:"address"`
- ContactName string `json:"contact_name"`
- ContactPhone string `json:"contact_phone"`
- CreatedBy int32 `json:"created_by"`
-}
-
-func (q *Queries) CreateCustomer(ctx context.Context, arg *CreateCustomerParams) (*Customer, error) {
- row := q.db.QueryRow(ctx, createCustomer,
- arg.ID,
- arg.Name,
- arg.Category,
- arg.Source,
- arg.Address,
- arg.ContactName,
- arg.ContactPhone,
- arg.CreatedBy,
- )
- var i Customer
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.Category,
- &i.Source,
- &i.Address,
- &i.ContactName,
- &i.ContactPhone,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedBy,
- &i.UpdatedAt,
- &i.UpdatedBy,
- )
- return &i, err
-}
-
-const getCustomer = `-- name: GetCustomer :one
-SELECT id, name, category, source, address, contact_name, contact_phone, status, sort, created_at, created_by, updated_at, updated_by
-FROM customers
-WHERE id = $1
-LIMIT 1
-`
-
-func (q *Queries) GetCustomer(ctx context.Context, id int64) (*Customer, error) {
- row := q.db.QueryRow(ctx, getCustomer, id)
- var i Customer
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.Category,
- &i.Source,
- &i.Address,
- &i.ContactName,
- &i.ContactPhone,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedBy,
- &i.UpdatedAt,
- &i.UpdatedBy,
- )
- return &i, err
-}
-
-const listCustomers = `-- name: ListCustomers :many
-SELECT id, name, category, source, address, contact_name, contact_phone, status, sort, created_at, created_by, updated_at, updated_by
-FROM customers
-WHERE status = 0
-ORDER BY id DESC
-LIMIT $1 OFFSET $2
-`
-
-type ListCustomersParams struct {
- Limit int32 `json:"limit"`
- Offset int32 `json:"offset"`
-}
-
-func (q *Queries) ListCustomers(ctx context.Context, arg *ListCustomersParams) ([]*Customer, error) {
- rows, err := q.db.Query(ctx, listCustomers, arg.Limit, arg.Offset)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*Customer{}
- for rows.Next() {
- var i Customer
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.Category,
- &i.Source,
- &i.Address,
- &i.ContactName,
- &i.ContactPhone,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedBy,
- &i.UpdatedAt,
- &i.UpdatedBy,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const updateCustomer = `-- name: UpdateCustomer :one
-UPDATE customers
-SET
- name = COALESCE($2, name),
- category = COALESCE($3, category),
- source = COALESCE($4, source),
- address = COALESCE($5, address),
- contact_name = COALESCE($6, contact_name),
- contact_phone = COALESCE($7, contact_phone),
- status = COALESCE($8, status),
- updated_by = COALESCE($9, updated_by),
- updated_at = NOW()
-WHERE id = $1
-RETURNING id, name, category, source, address, contact_name, contact_phone, status, sort, created_at, created_by, updated_at, updated_by
-`
-
-type UpdateCustomerParams struct {
- ID int64 `json:"id"`
- Name pgtype.Text `json:"name"`
- Category pgtype.Int4 `json:"category"`
- Source pgtype.Int4 `json:"source"`
- Address pgtype.Text `json:"address"`
- ContactName pgtype.Text `json:"contact_name"`
- ContactPhone pgtype.Text `json:"contact_phone"`
- Status pgtype.Int2 `json:"status"`
- UpdatedBy pgtype.Int4 `json:"updated_by"`
-}
-
-func (q *Queries) UpdateCustomer(ctx context.Context, arg *UpdateCustomerParams) (*Customer, error) {
- row := q.db.QueryRow(ctx, updateCustomer,
- arg.ID,
- arg.Name,
- arg.Category,
- arg.Source,
- arg.Address,
- arg.ContactName,
- arg.ContactPhone,
- arg.Status,
- arg.UpdatedBy,
- )
- var i Customer
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.Category,
- &i.Source,
- &i.Address,
- &i.ContactName,
- &i.ContactPhone,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedBy,
- &i.UpdatedAt,
- &i.UpdatedBy,
- )
- return &i, err
-}
diff --git a/internal/db/sqlc/db.go b/internal/db/sqlc/db.go
deleted file mode 100644
index eeee39e..0000000
--- a/internal/db/sqlc/db.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-
-package db
-
-import (
- "context"
-
- "github.com/jackc/pgx/v5"
- "github.com/jackc/pgx/v5/pgconn"
-)
-
-type DBTX interface {
- Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error)
- Query(context.Context, string, ...interface{}) (pgx.Rows, error)
- QueryRow(context.Context, string, ...interface{}) pgx.Row
-}
-
-func New(db DBTX) *Queries {
- return &Queries{db: db}
-}
-
-type Queries struct {
- db DBTX
-}
-
-func (q *Queries) WithTx(tx pgx.Tx) *Queries {
- return &Queries{
- db: tx,
- }
-}
diff --git a/internal/db/sqlc/dtos.go b/internal/db/sqlc/dtos.go
deleted file mode 100644
index d65a143..0000000
--- a/internal/db/sqlc/dtos.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package db
-
-import "time"
-
-type SysDepartmentDto struct {
- ID int32 `json:"id"`
- // 部门名称
- Name string `json:"name"`
- // 上级id
- ParentID int32 `json:"parent_id"`
- // 树路径
- ParentPath string `json:"parent_path"`
- // 状态
- Status int32 `json:"status"`
- // 排序
- Sort int32 `json:"sort"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
- Children []*SysDepartmentDto `json:"children"`
-}
-
-type SysMenuDto struct {
- ID int32 `json:"id"`
- // 名称
- Name string `json:"name"`
- // 显示名称
- DisplayName string `json:"display_name"`
- // 菜单url
- Url string `json:"url"`
- // 菜单类型(node, menu, btn)
- Type string `json:"type"`
- // 上级id
- ParentID int32 `json:"parent_id"`
- // 树路径
- ParentPath string `json:"parent_path"`
- // 菜单图标
- Avatar string `json:"avatar"`
- // 菜单样式
- Style string `json:"style"`
- // 是否可见
- Visible bool `json:"visible"`
- // 是否列表
- IsList bool `json:"is_list"`
- // 状态
- Status int32 `json:"status"`
- // 排序
- Sort int32 `json:"sort"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
-
- Children []*SysMenuDto `json:"children"`
-}
diff --git a/internal/db/sqlc/expenses.sql.go b/internal/db/sqlc/expenses.sql.go
deleted file mode 100644
index 4a65572..0000000
--- a/internal/db/sqlc/expenses.sql.go
+++ /dev/null
@@ -1,234 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: expenses.sql
-
-package db
-
-import (
- "context"
- "time"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-const createExpense = `-- name: CreateExpense :one
-INSERT INTO expenses (project_id, budget_id, amount, expenses_at, expenses_type, remark, status, created_user_id)
-VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
-RETURNING id, project_id, budget_id, amount, expenses_at, expenses_type, remark, status, created_at, created_user_id, updated_at, updated_user_id
-`
-
-type CreateExpenseParams struct {
- ProjectID int64 `json:"project_id"`
- BudgetID int64 `json:"budget_id"`
- Amount pgtype.Numeric `json:"amount"`
- ExpensesAt time.Time `json:"expenses_at"`
- ExpensesType int32 `json:"expenses_type"`
- Remark string `json:"remark"`
- Status int16 `json:"status"`
- CreatedUserID int32 `json:"created_user_id"`
-}
-
-func (q *Queries) CreateExpense(ctx context.Context, arg *CreateExpenseParams) (*Expense, error) {
- row := q.db.QueryRow(ctx, createExpense,
- arg.ProjectID,
- arg.BudgetID,
- arg.Amount,
- arg.ExpensesAt,
- arg.ExpensesType,
- arg.Remark,
- arg.Status,
- arg.CreatedUserID,
- )
- var i Expense
- err := row.Scan(
- &i.ID,
- &i.ProjectID,
- &i.BudgetID,
- &i.Amount,
- &i.ExpensesAt,
- &i.ExpensesType,
- &i.Remark,
- &i.Status,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- )
- return &i, err
-}
-
-const getExpense = `-- name: GetExpense :one
-SELECT id, project_id, budget_id, amount, expenses_at, expenses_type, remark, status, created_at, created_user_id, updated_at, updated_user_id
-FROM expenses
-WHERE id = $1
-LIMIT 1
-`
-
-func (q *Queries) GetExpense(ctx context.Context, id int64) (*Expense, error) {
- row := q.db.QueryRow(ctx, getExpense, id)
- var i Expense
- err := row.Scan(
- &i.ID,
- &i.ProjectID,
- &i.BudgetID,
- &i.Amount,
- &i.ExpensesAt,
- &i.ExpensesType,
- &i.Remark,
- &i.Status,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- )
- return &i, err
-}
-
-const statisticsExpense = `-- name: StatisticsExpense :many
-SELECT SUM(amount)::numeric as total_amount,
- (select name from categories where id = expenses.expenses_type) expenses_type_name
-FROM expenses
-GROUP BY expenses_type
-`
-
-type StatisticsExpenseRow struct {
- TotalAmount pgtype.Numeric `json:"total_amount"`
- ExpensesTypeName string `json:"expenses_type_name"`
-}
-
-func (q *Queries) StatisticsExpense(ctx context.Context) ([]*StatisticsExpenseRow, error) {
- rows, err := q.db.Query(ctx, statisticsExpense)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*StatisticsExpenseRow{}
- for rows.Next() {
- var i StatisticsExpenseRow
- if err := rows.Scan(&i.TotalAmount, &i.ExpensesTypeName); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const statisticsExpenseByProjectID = `-- name: StatisticsExpenseByProjectID :many
-SELECT SUM(amount)::numeric as total_amount,
- (select name from categories where id = expenses.expenses_type) expenses_type_name
-FROM expenses
-WHERE project_id = $1
-GROUP BY expenses_type
-`
-
-type StatisticsExpenseByProjectIDRow struct {
- TotalAmount pgtype.Numeric `json:"total_amount"`
- ExpensesTypeName string `json:"expenses_type_name"`
-}
-
-func (q *Queries) StatisticsExpenseByProjectID(ctx context.Context, projectID int64) ([]*StatisticsExpenseByProjectIDRow, error) {
- rows, err := q.db.Query(ctx, statisticsExpenseByProjectID, projectID)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*StatisticsExpenseByProjectIDRow{}
- for rows.Next() {
- var i StatisticsExpenseByProjectIDRow
- if err := rows.Scan(&i.TotalAmount, &i.ExpensesTypeName); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const sumExpense = `-- name: SumExpense :one
-SELECT SUM(amount)::numeric
-FROM expenses
-`
-
-func (q *Queries) SumExpense(ctx context.Context) (pgtype.Numeric, error) {
- row := q.db.QueryRow(ctx, sumExpense)
- var column_1 pgtype.Numeric
- err := row.Scan(&column_1)
- return column_1, err
-}
-
-const sumExpenseByProjectID = `-- name: SumExpenseByProjectID :one
-SELECT SUM(amount)::numeric
-FROM expenses
-WHERE project_id = $1
-`
-
-func (q *Queries) SumExpenseByProjectID(ctx context.Context, projectID int64) (pgtype.Numeric, error) {
- row := q.db.QueryRow(ctx, sumExpenseByProjectID, projectID)
- var column_1 pgtype.Numeric
- err := row.Scan(&column_1)
- return column_1, err
-}
-
-const updateExpense = `-- name: UpdateExpense :one
-UPDATE expenses
-SET
- project_id = COALESCE($2, project_id),
- budget_id = COALESCE($3, budget_id),
- amount = COALESCE($4, amount),
- expenses_at = COALESCE($5, expenses_at),
- expenses_type = COALESCE($6, expenses_type),
- remark = COALESCE($7, remark),
- status = COALESCE($8, status),
- updated_user_id = COALESCE($9, updated_user_id),
- updated_at = NOW()
-WHERE id = $1
-RETURNING id, project_id, budget_id, amount, expenses_at, expenses_type, remark, status, created_at, created_user_id, updated_at, updated_user_id
-`
-
-type UpdateExpenseParams struct {
- ID int64 `json:"id"`
- ProjectID pgtype.Int8 `json:"project_id"`
- BudgetID pgtype.Int8 `json:"budget_id"`
- Amount pgtype.Numeric `json:"amount"`
- ExpensesAt pgtype.Timestamptz `json:"expenses_at"`
- ExpensesType pgtype.Int4 `json:"expenses_type"`
- Remark pgtype.Text `json:"remark"`
- Status pgtype.Int2 `json:"status"`
- UpdatedUserID pgtype.Int4 `json:"updated_user_id"`
-}
-
-func (q *Queries) UpdateExpense(ctx context.Context, arg *UpdateExpenseParams) (*Expense, error) {
- row := q.db.QueryRow(ctx, updateExpense,
- arg.ID,
- arg.ProjectID,
- arg.BudgetID,
- arg.Amount,
- arg.ExpensesAt,
- arg.ExpensesType,
- arg.Remark,
- arg.Status,
- arg.UpdatedUserID,
- )
- var i Expense
- err := row.Scan(
- &i.ID,
- &i.ProjectID,
- &i.BudgetID,
- &i.Amount,
- &i.ExpensesAt,
- &i.ExpensesType,
- &i.Remark,
- &i.Status,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- )
- return &i, err
-}
diff --git a/internal/db/sqlc/income.sql.go b/internal/db/sqlc/income.sql.go
deleted file mode 100644
index 31e1f03..0000000
--- a/internal/db/sqlc/income.sql.go
+++ /dev/null
@@ -1,242 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: income.sql
-
-package db
-
-import (
- "context"
- "time"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-const createIncome = `-- name: CreateIncome :one
-INSERT INTO incomes (project_id, budget_id, amount, income_at, income_type, income_bank, remark, status, created_user_id)
-VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
-RETURNING id, project_id, budget_id, amount, income_at, income_type, income_bank, remark, status, created_at, created_user_id, updated_at, updated_user_id
-`
-
-type CreateIncomeParams struct {
- ProjectID int64 `json:"project_id"`
- BudgetID int64 `json:"budget_id"`
- Amount pgtype.Numeric `json:"amount"`
- IncomeAt time.Time `json:"income_at"`
- IncomeType int32 `json:"income_type"`
- IncomeBank int32 `json:"income_bank"`
- Remark string `json:"remark"`
- Status int16 `json:"status"`
- CreatedUserID int32 `json:"created_user_id"`
-}
-
-func (q *Queries) CreateIncome(ctx context.Context, arg *CreateIncomeParams) (*Income, error) {
- row := q.db.QueryRow(ctx, createIncome,
- arg.ProjectID,
- arg.BudgetID,
- arg.Amount,
- arg.IncomeAt,
- arg.IncomeType,
- arg.IncomeBank,
- arg.Remark,
- arg.Status,
- arg.CreatedUserID,
- )
- var i Income
- err := row.Scan(
- &i.ID,
- &i.ProjectID,
- &i.BudgetID,
- &i.Amount,
- &i.IncomeAt,
- &i.IncomeType,
- &i.IncomeBank,
- &i.Remark,
- &i.Status,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- )
- return &i, err
-}
-
-const getIncome = `-- name: GetIncome :one
-SELECT id, project_id, budget_id, amount, income_at, income_type, income_bank, remark, status, created_at, created_user_id, updated_at, updated_user_id
-FROM incomes
-WHERE id = $1
-LIMIT 1
-`
-
-func (q *Queries) GetIncome(ctx context.Context, id int64) (*Income, error) {
- row := q.db.QueryRow(ctx, getIncome, id)
- var i Income
- err := row.Scan(
- &i.ID,
- &i.ProjectID,
- &i.BudgetID,
- &i.Amount,
- &i.IncomeAt,
- &i.IncomeType,
- &i.IncomeBank,
- &i.Remark,
- &i.Status,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- )
- return &i, err
-}
-
-const statisticsIncome = `-- name: StatisticsIncome :many
-SELECT SUM(amount)::numeric as total_amount,
- (select name from categories where id = incomes.income_type) income_type_name
-FROM incomes
-GROUP BY income_type
-`
-
-type StatisticsIncomeRow struct {
- TotalAmount pgtype.Numeric `json:"total_amount"`
- IncomeTypeName string `json:"income_type_name"`
-}
-
-func (q *Queries) StatisticsIncome(ctx context.Context) ([]*StatisticsIncomeRow, error) {
- rows, err := q.db.Query(ctx, statisticsIncome)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*StatisticsIncomeRow{}
- for rows.Next() {
- var i StatisticsIncomeRow
- if err := rows.Scan(&i.TotalAmount, &i.IncomeTypeName); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const statisticsIncomeByProjectID = `-- name: StatisticsIncomeByProjectID :many
-SELECT SUM(amount)::numeric as total_amount,
- (select name from categories where id = incomes.income_type) income_type_name
-FROM incomes
-WHERE project_id = $1
-GROUP BY income_type
-`
-
-type StatisticsIncomeByProjectIDRow struct {
- TotalAmount pgtype.Numeric `json:"total_amount"`
- IncomeTypeName string `json:"income_type_name"`
-}
-
-func (q *Queries) StatisticsIncomeByProjectID(ctx context.Context, projectID int64) ([]*StatisticsIncomeByProjectIDRow, error) {
- rows, err := q.db.Query(ctx, statisticsIncomeByProjectID, projectID)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*StatisticsIncomeByProjectIDRow{}
- for rows.Next() {
- var i StatisticsIncomeByProjectIDRow
- if err := rows.Scan(&i.TotalAmount, &i.IncomeTypeName); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const sumIncome = `-- name: SumIncome :one
-SELECT SUM(amount)::numeric
-FROM incomes
-`
-
-func (q *Queries) SumIncome(ctx context.Context) (pgtype.Numeric, error) {
- row := q.db.QueryRow(ctx, sumIncome)
- var column_1 pgtype.Numeric
- err := row.Scan(&column_1)
- return column_1, err
-}
-
-const sumIncomeByProjectID = `-- name: SumIncomeByProjectID :one
-SELECT SUM(amount)::numeric
-FROM incomes
-WHERE project_id = $1
-`
-
-func (q *Queries) SumIncomeByProjectID(ctx context.Context, projectID int64) (pgtype.Numeric, error) {
- row := q.db.QueryRow(ctx, sumIncomeByProjectID, projectID)
- var column_1 pgtype.Numeric
- err := row.Scan(&column_1)
- return column_1, err
-}
-
-const updateIncome = `-- name: UpdateIncome :one
-UPDATE incomes
-SET
- project_id = COALESCE($2, project_id),
- budget_id = COALESCE($3, budget_id),
- amount = COALESCE($4, amount),
- income_at = COALESCE($5, income_at),
- income_type = COALESCE($6, income_type),
- income_bank = COALESCE($7, income_bank),
- remark = COALESCE($8, remark),
- status = COALESCE($9, status),
- updated_user_id = COALESCE($10, updated_user_id),
- updated_at = NOW()
-WHERE id = $1
-RETURNING id, project_id, budget_id, amount, income_at, income_type, income_bank, remark, status, created_at, created_user_id, updated_at, updated_user_id
-`
-
-type UpdateIncomeParams struct {
- ID int64 `json:"id"`
- ProjectID pgtype.Int8 `json:"project_id"`
- BudgetID pgtype.Int8 `json:"budget_id"`
- Amount pgtype.Numeric `json:"amount"`
- IncomeAt pgtype.Timestamptz `json:"income_at"`
- IncomeType pgtype.Int4 `json:"income_type"`
- IncomeBank pgtype.Int4 `json:"income_bank"`
- Remark pgtype.Text `json:"remark"`
- Status pgtype.Int2 `json:"status"`
- UpdatedUserID pgtype.Int4 `json:"updated_user_id"`
-}
-
-func (q *Queries) UpdateIncome(ctx context.Context, arg *UpdateIncomeParams) (*Income, error) {
- row := q.db.QueryRow(ctx, updateIncome,
- arg.ID,
- arg.ProjectID,
- arg.BudgetID,
- arg.Amount,
- arg.IncomeAt,
- arg.IncomeType,
- arg.IncomeBank,
- arg.Remark,
- arg.Status,
- arg.UpdatedUserID,
- )
- var i Income
- err := row.Scan(
- &i.ID,
- &i.ProjectID,
- &i.BudgetID,
- &i.Amount,
- &i.IncomeAt,
- &i.IncomeType,
- &i.IncomeBank,
- &i.Remark,
- &i.Status,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- )
- return &i, err
-}
diff --git a/internal/db/sqlc/models.go b/internal/db/sqlc/models.go
deleted file mode 100644
index 768f5ce..0000000
--- a/internal/db/sqlc/models.go
+++ /dev/null
@@ -1,425 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-
-package db
-
-import (
- "time"
-
- "github.com/google/uuid"
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type Budget struct {
- // ID
- ID int64 `json:"id"`
- // 项目ID
- ProjectID int64 `json:"project_id"`
- // 名称
- Name string `json:"name"`
- // 预算类型: 收入/支出
- BudgetType int32 `json:"budget_type"`
- // 类别
- Category int32 `json:"category"`
- // 开始时间
- StartAt time.Time `json:"start_at"`
- // 结束时间
- EndAt time.Time `json:"end_at"`
- // 预算金额
- Amount pgtype.Numeric `json:"amount"`
- // 已使用金额
- UsedAmount pgtype.Numeric `json:"used_amount"`
- // 剩余金额
- RemainingAmount pgtype.Numeric `json:"remaining_amount"`
- // 备注
- Remark string `json:"remark"`
- // 状态
- Status int16 `json:"status"`
- // 排序
- Sort int32 `json:"sort"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 创建人
- CreatedUserID int32 `json:"created_user_id"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
- // 更新人
- UpdatedUserID int32 `json:"updated_user_id"`
-}
-
-type Category struct {
- // ID
- ID int32 `json:"id"`
- // 名称
- Name string `json:"name"`
- // 图标
- Icon string `json:"icon"`
- // 描述
- Description string `json:"description"`
- // 拼音
- Letter string `json:"letter"`
- // 父级ID
- ParentID int32 `json:"parent_id"`
- // 树路径
- ParentPath string `json:"parent_path"`
- // 状态
- Status int16 `json:"status"`
- // 排序
- Sort int32 `json:"sort"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-type Customer struct {
- // ID
- ID int64 `json:"id"`
- // 名称
- Name string `json:"name"`
- // 类别
- Category int32 `json:"category"`
- // 来源
- Source int32 `json:"source"`
- // 地址
- Address string `json:"address"`
- // 主要联系人
- ContactName string `json:"contact_name"`
- // 主要联系人手机
- ContactPhone string `json:"contact_phone"`
- // 状态
- Status int16 `json:"status"`
- // 排序
- Sort int32 `json:"sort"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 创建人
- CreatedBy int32 `json:"created_by"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
- // 更新人
- UpdatedBy int32 `json:"updated_by"`
-}
-
-type CustomerContact struct {
- // ID
- ID int32 `json:"id"`
- // 名称
- Name string `json:"name"`
- // 联系方式
- Telephone string `json:"telephone"`
- // 客户ID
- CustomerID int64 `json:"customer_id"`
- // 状态
- Status int16 `json:"status"`
- // 排序
- Sort int32 `json:"sort"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 创建人
- CreatedBy int32 `json:"created_by"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
- // 更新人
- UpdatedBy int32 `json:"updated_by"`
-}
-
-type Expense struct {
- // ID
- ID int64 `json:"id"`
- // 项目ID
- ProjectID int64 `json:"project_id"`
- // 预算ID
- BudgetID int64 `json:"budget_id"`
- // 支出金额
- Amount pgtype.Numeric `json:"amount"`
- // 支出时间
- ExpensesAt time.Time `json:"expenses_at"`
- // 支出类型
- ExpensesType int32 `json:"expenses_type"`
- // 备注
- Remark string `json:"remark"`
- // 状态
- Status int16 `json:"status"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 创建人
- CreatedUserID int32 `json:"created_user_id"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
- // 更新人
- UpdatedUserID int32 `json:"updated_user_id"`
-}
-
-type Income struct {
- // ID
- ID int64 `json:"id"`
- // 项目ID
- ProjectID int64 `json:"project_id"`
- // 预算ID
- BudgetID int64 `json:"budget_id"`
- // 收入金额
- Amount pgtype.Numeric `json:"amount"`
- // 收入时间
- IncomeAt time.Time `json:"income_at"`
- // 收入类型
- IncomeType int32 `json:"income_type"`
- // 收入银行
- IncomeBank int32 `json:"income_bank"`
- // 备注
- Remark string `json:"remark"`
- // 状态
- Status int16 `json:"status"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 创建人
- CreatedUserID int32 `json:"created_user_id"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
- // 更新人
- UpdatedUserID int32 `json:"updated_user_id"`
-}
-
-type Project struct {
- // ID
- ID int64 `json:"id"`
- // 名称
- Name string `json:"name"`
- // 开始时间
- StartAt time.Time `json:"start_at"`
- // 结束时间
- EndAt time.Time `json:"end_at"`
- // 客户ID
- CustomerID int64 `json:"customer_id"`
- // 总金额
- TotalMoney pgtype.Numeric `json:"total_money"`
- // 简介
- Description string `json:"description"`
- // 申请时间
- ApplyAt time.Time `json:"apply_at"`
- // 申请人
- ApplyUserID int32 `json:"apply_user_id"`
- // 项目经理
- ManagerID int32 `json:"manager_id"`
- // 项目成员
- Members string `json:"members"`
- // 状态
- Status int16 `json:"status"`
- // 排序
- Sort int32 `json:"sort"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 创建人
- CreatedUserID int32 `json:"created_user_id"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
- // 更新人
- UpdatedUserID int32 `json:"updated_user_id"`
-}
-
-type ProjectFile struct {
- // ID
- ID int64 `json:"id"`
- // 名称
- Name string `json:"name"`
- // 路径
- Path string `json:"path"`
- // 项目ID
- ProjectID int64 `json:"project_id"`
- // 排序
- Sort int32 `json:"sort"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 创建人
- CreatedUserID int32 `json:"created_user_id"`
-}
-
-type Session struct {
- // token
- Token string `json:"token"`
- // data
- Data []byte `json:"data"`
- // expiry
- Expiry time.Time `json:"expiry"`
-}
-
-type SysAuditLog struct {
- ID int64 `json:"id"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 邮箱地址
- Email string `json:"email"`
- // 用户名称
- Username string `json:"username"`
- // 用户uuid
- UserUuid uuid.UUID `json:"user_uuid"`
- // 请求开始时间
- StartAt time.Time `json:"start_at"`
- // 请求结束时间
- EndAt time.Time `json:"end_at"`
- // 请求总时间
- Duration string `json:"duration"`
- // 请求链接
- Url string `json:"url"`
- // 请求类型
- Method string `json:"method"`
- // 请求参数
- Parameters string `json:"parameters"`
- // 上一个链接
- RefererUrl string `json:"referer_url"`
- // 系统
- Os string `json:"os"`
- // ip
- Ip string `json:"ip"`
- // 浏览器
- Browser string `json:"browser"`
- // 备注
- Remark string `json:"remark"`
-}
-
-type SysConfig struct {
- ID int32 `json:"id"`
- // 存储键
- Key string `json:"key"`
- // 存储值
- Value []byte `json:"value"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-type SysDepartment struct {
- ID int32 `json:"id"`
- // 部门名称
- Name string `json:"name"`
- // 上级id
- ParentID int32 `json:"parent_id"`
- // 树路径
- ParentPath string `json:"parent_path"`
- // 状态
- Status int32 `json:"status"`
- // 排序
- Sort int32 `json:"sort"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-type SysMenu struct {
- ID int32 `json:"id"`
- // 名称
- Name string `json:"name"`
- // 显示名称
- DisplayName string `json:"display_name"`
- // 菜单url
- Url string `json:"url"`
- // 菜单类型(node, menu, btn)
- Type string `json:"type"`
- // 上级id
- ParentID int32 `json:"parent_id"`
- // 树路径
- ParentPath string `json:"parent_path"`
- // 菜单图标
- Avatar string `json:"avatar"`
- // 菜单样式
- Style string `json:"style"`
- // 是否可见
- Visible bool `json:"visible"`
- // 是否列表
- IsList bool `json:"is_list"`
- // 状态
- Status int32 `json:"status"`
- // 排序
- Sort int32 `json:"sort"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-type SysRole struct {
- ID int32 `json:"id"`
- // 名称
- Name string `json:"name"`
- // 显示名称
- DisplayName string `json:"display_name"`
- // 上级id
- ParentID int32 `json:"parent_id"`
- // 树路径
- ParentPath string `json:"parent_path"`
- // 是否vip
- Vip bool `json:"vip"`
- // 状态
- Status int32 `json:"status"`
- // 排序
- Sort int32 `json:"sort"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-type SysRoleMenu struct {
- // 角色id
- RoleID int32 `json:"role_id"`
- // 菜单id
- MenuID int32 `json:"menu_id"`
-}
-
-type SysUser struct {
- ID int32 `json:"id"`
- Uuid uuid.UUID `json:"uuid"`
- // 邮箱地址
- Email string `json:"email"`
- // 用户名称
- Username string `json:"username"`
- // 加密密码
- HashedPassword []byte `json:"hashed_password"`
- // 密码盐值
- Salt string `json:"salt"`
- // 头像
- Avatar string `json:"avatar"`
- // 性别
- Gender int32 `json:"gender"`
- // 部门
- DepartmentID int32 `json:"department_id"`
- // 角色
- RoleID int32 `json:"role_id"`
- // 状态
- Status int32 `json:"status"`
- // 密码修改时间
- ChangePasswordAt time.Time `json:"change_password_at"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 更新时间
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-type SysUserLoginLog struct {
- ID int64 `json:"id"`
- // 创建时间
- CreatedAt time.Time `json:"created_at"`
- // 邮箱地址
- Email string `json:"email"`
- // 用户名称
- Username string `json:"username"`
- // 用户uuid
- UserUuid uuid.UUID `json:"user_uuid"`
- // 是否登陆成功
- IsSuccess bool `json:"is_success"`
- // 登陆消息
- Message string `json:"message"`
- // 上一个链接
- RefererUrl string `json:"referer_url"`
- // 链接
- Url string `json:"url"`
- // 系统
- Os string `json:"os"`
- // ip
- Ip string `json:"ip"`
- // 浏览器
- Browser string `json:"browser"`
-}
diff --git a/internal/db/sqlc/project.sql.go b/internal/db/sqlc/project.sql.go
deleted file mode 100644
index b5f64d4..0000000
--- a/internal/db/sqlc/project.sql.go
+++ /dev/null
@@ -1,343 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: project.sql
-
-package db
-
-import (
- "context"
- "time"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-const allProjects = `-- name: AllProjects :many
-SELECT id, name, start_at, end_at, customer_id, total_money, description, apply_at, apply_user_id, manager_id, members, status, sort, created_at, created_user_id, updated_at, updated_user_id FROM projects
-WHERE status > -1
-ORDER BY id DESC
-`
-
-func (q *Queries) AllProjects(ctx context.Context) ([]*Project, error) {
- rows, err := q.db.Query(ctx, allProjects)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*Project{}
- for rows.Next() {
- var i Project
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.StartAt,
- &i.EndAt,
- &i.CustomerID,
- &i.TotalMoney,
- &i.Description,
- &i.ApplyAt,
- &i.ApplyUserID,
- &i.ManagerID,
- &i.Members,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const countProjects = `-- name: CountProjects :one
-SELECT COUNT(1)
-FROM projects
-WHERE status = $1
-`
-
-func (q *Queries) CountProjects(ctx context.Context, status int16) (int64, error) {
- row := q.db.QueryRow(ctx, countProjects, status)
- var count int64
- err := row.Scan(&count)
- return count, err
-}
-
-const createProject = `-- name: CreateProject :one
-INSERT INTO projects (id, name, start_at, end_at, customer_id, total_money, description, apply_at, apply_user_id, manager_id, members, status, created_user_id)
-VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13)
-RETURNING id, name, start_at, end_at, customer_id, total_money, description, apply_at, apply_user_id, manager_id, members, status, sort, created_at, created_user_id, updated_at, updated_user_id
-`
-
-type CreateProjectParams struct {
- ID int64 `json:"id"`
- Name string `json:"name"`
- StartAt time.Time `json:"start_at"`
- EndAt time.Time `json:"end_at"`
- CustomerID int64 `json:"customer_id"`
- TotalMoney pgtype.Numeric `json:"total_money"`
- Description string `json:"description"`
- ApplyAt time.Time `json:"apply_at"`
- ApplyUserID int32 `json:"apply_user_id"`
- ManagerID int32 `json:"manager_id"`
- Members string `json:"members"`
- Status int16 `json:"status"`
- CreatedUserID int32 `json:"created_user_id"`
-}
-
-func (q *Queries) CreateProject(ctx context.Context, arg *CreateProjectParams) (*Project, error) {
- row := q.db.QueryRow(ctx, createProject,
- arg.ID,
- arg.Name,
- arg.StartAt,
- arg.EndAt,
- arg.CustomerID,
- arg.TotalMoney,
- arg.Description,
- arg.ApplyAt,
- arg.ApplyUserID,
- arg.ManagerID,
- arg.Members,
- arg.Status,
- arg.CreatedUserID,
- )
- var i Project
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.StartAt,
- &i.EndAt,
- &i.CustomerID,
- &i.TotalMoney,
- &i.Description,
- &i.ApplyAt,
- &i.ApplyUserID,
- &i.ManagerID,
- &i.Members,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- )
- return &i, err
-}
-
-const getProject = `-- name: GetProject :one
-SELECT id, name, start_at, end_at, customer_id, total_money, description, apply_at, apply_user_id, manager_id, members, status, sort, created_at, created_user_id, updated_at, updated_user_id
-FROM projects
-WHERE id = $1
-LIMIT 1
-`
-
-func (q *Queries) GetProject(ctx context.Context, id int64) (*Project, error) {
- row := q.db.QueryRow(ctx, getProject, id)
- var i Project
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.StartAt,
- &i.EndAt,
- &i.CustomerID,
- &i.TotalMoney,
- &i.Description,
- &i.ApplyAt,
- &i.ApplyUserID,
- &i.ManagerID,
- &i.Members,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- )
- return &i, err
-}
-
-const listProjects = `-- name: ListProjects :many
-SELECT id, name, start_at, end_at, customer_id, total_money, description, apply_at, apply_user_id, manager_id, members, status, sort, created_at, created_user_id, updated_at, updated_user_id
-FROM projects
-WHERE status = $1
-ORDER BY id DESC
-LIMIT $1 OFFSET $2
-`
-
-type ListProjectsParams struct {
- Limit int32 `json:"limit"`
- Offset int32 `json:"offset"`
-}
-
-func (q *Queries) ListProjects(ctx context.Context, arg *ListProjectsParams) ([]*Project, error) {
- rows, err := q.db.Query(ctx, listProjects, arg.Limit, arg.Offset)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*Project{}
- for rows.Next() {
- var i Project
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.StartAt,
- &i.EndAt,
- &i.CustomerID,
- &i.TotalMoney,
- &i.Description,
- &i.ApplyAt,
- &i.ApplyUserID,
- &i.ManagerID,
- &i.Members,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const statisticsProjectItem = `-- name: StatisticsProjectItem :one
-select name,
- (select sum(amount)::numeric from incomes where project_id = projects.id) income,
- (select sum(amount)::numeric from expenses where project_id = projects.id) expense
-from projects
-where projects.id = $1
-`
-
-type StatisticsProjectItemRow struct {
- Name string `json:"name"`
- Income pgtype.Numeric `json:"income"`
- Expense pgtype.Numeric `json:"expense"`
-}
-
-func (q *Queries) StatisticsProjectItem(ctx context.Context, id int64) (*StatisticsProjectItemRow, error) {
- row := q.db.QueryRow(ctx, statisticsProjectItem, id)
- var i StatisticsProjectItemRow
- err := row.Scan(&i.Name, &i.Income, &i.Expense)
- return &i, err
-}
-
-const statisticsProjects = `-- name: StatisticsProjects :many
-select name,
- (select sum(amount)::numeric from incomes where project_id = projects.id) income,
- (select sum(amount)::numeric from expenses where project_id = projects.id) expense
-from projects
-`
-
-type StatisticsProjectsRow struct {
- Name string `json:"name"`
- Income pgtype.Numeric `json:"income"`
- Expense pgtype.Numeric `json:"expense"`
-}
-
-func (q *Queries) StatisticsProjects(ctx context.Context) ([]*StatisticsProjectsRow, error) {
- rows, err := q.db.Query(ctx, statisticsProjects)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*StatisticsProjectsRow{}
- for rows.Next() {
- var i StatisticsProjectsRow
- if err := rows.Scan(&i.Name, &i.Income, &i.Expense); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const updateProject = `-- name: UpdateProject :one
-UPDATE projects
-SET
- name = COALESCE($2, name),
- start_at = COALESCE($3, start_at),
- end_at = COALESCE($4, end_at),
- customer_id = COALESCE($5, customer_id),
- total_money = COALESCE($6, total_money),
- description = COALESCE($7, description),
- apply_at = COALESCE($8, apply_at),
- apply_user_id = COALESCE($9, apply_user_id),
- manager_id = COALESCE($10, manager_id),
- members = COALESCE($11, members),
- status = COALESCE($12, status),
- updated_user_id = COALESCE($13, updated_user_id),
- updated_at = NOW()
-WHERE id = $1
-RETURNING id, name, start_at, end_at, customer_id, total_money, description, apply_at, apply_user_id, manager_id, members, status, sort, created_at, created_user_id, updated_at, updated_user_id
-`
-
-type UpdateProjectParams struct {
- ID int64 `json:"id"`
- Name pgtype.Text `json:"name"`
- StartAt pgtype.Timestamptz `json:"start_at"`
- EndAt pgtype.Timestamptz `json:"end_at"`
- CustomerID pgtype.Int8 `json:"customer_id"`
- TotalMoney pgtype.Numeric `json:"total_money"`
- Description pgtype.Text `json:"description"`
- ApplyAt pgtype.Timestamptz `json:"apply_at"`
- ApplyUserID pgtype.Int4 `json:"apply_user_id"`
- ManagerID pgtype.Int4 `json:"manager_id"`
- Members pgtype.Text `json:"members"`
- Status pgtype.Int2 `json:"status"`
- UpdatedUserID pgtype.Int4 `json:"updated_user_id"`
-}
-
-func (q *Queries) UpdateProject(ctx context.Context, arg *UpdateProjectParams) (*Project, error) {
- row := q.db.QueryRow(ctx, updateProject,
- arg.ID,
- arg.Name,
- arg.StartAt,
- arg.EndAt,
- arg.CustomerID,
- arg.TotalMoney,
- arg.Description,
- arg.ApplyAt,
- arg.ApplyUserID,
- arg.ManagerID,
- arg.Members,
- arg.Status,
- arg.UpdatedUserID,
- )
- var i Project
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.StartAt,
- &i.EndAt,
- &i.CustomerID,
- &i.TotalMoney,
- &i.Description,
- &i.ApplyAt,
- &i.ApplyUserID,
- &i.ManagerID,
- &i.Members,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- )
- return &i, err
-}
diff --git a/internal/db/sqlc/project_file.sql.go b/internal/db/sqlc/project_file.sql.go
deleted file mode 100644
index 9954fd8..0000000
--- a/internal/db/sqlc/project_file.sql.go
+++ /dev/null
@@ -1,90 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: project_file.sql
-
-package db
-
-import (
- "context"
-)
-
-const createProjectFile = `-- name: CreateProjectFile :one
-INSERT INTO project_files (id, name, path, project_id, created_user_id)
-VALUES($1, $2, $3, $4, $5)
-RETURNING id, name, path, project_id, sort, created_at, created_user_id
-`
-
-type CreateProjectFileParams struct {
- ID int64 `json:"id"`
- Name string `json:"name"`
- Path string `json:"path"`
- ProjectID int64 `json:"project_id"`
- CreatedUserID int32 `json:"created_user_id"`
-}
-
-func (q *Queries) CreateProjectFile(ctx context.Context, arg *CreateProjectFileParams) (*ProjectFile, error) {
- row := q.db.QueryRow(ctx, createProjectFile,
- arg.ID,
- arg.Name,
- arg.Path,
- arg.ProjectID,
- arg.CreatedUserID,
- )
- var i ProjectFile
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.Path,
- &i.ProjectID,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedUserID,
- )
- return &i, err
-}
-
-const deleteProjectFile = `-- name: DeleteProjectFile :exec
-DELETE FROM project_files
-WHERE project_id = $1
-`
-
-func (q *Queries) DeleteProjectFile(ctx context.Context, projectID int64) error {
- _, err := q.db.Exec(ctx, deleteProjectFile, projectID)
- return err
-}
-
-const listProjectFiles = `-- name: ListProjectFiles :many
-SELECT id, name, path, project_id, sort, created_at, created_user_id
-FROM project_files
-WHERE project_id = $1
-ORDER BY id
-`
-
-func (q *Queries) ListProjectFiles(ctx context.Context, projectID int64) ([]*ProjectFile, error) {
- rows, err := q.db.Query(ctx, listProjectFiles, projectID)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*ProjectFile{}
- for rows.Next() {
- var i ProjectFile
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.Path,
- &i.ProjectID,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedUserID,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
diff --git a/internal/db/sqlc/querier.go b/internal/db/sqlc/querier.go
deleted file mode 100644
index 4a71264..0000000
--- a/internal/db/sqlc/querier.go
+++ /dev/null
@@ -1,116 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-
-package db
-
-import (
- "context"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type Querier interface {
- AllCategories(ctx context.Context) ([]*Category, error)
- AllCustomers(ctx context.Context) ([]*Customer, error)
- AllProjects(ctx context.Context) ([]*Project, error)
- AllSysDepartment(ctx context.Context) ([]*SysDepartment, error)
- AllSysMenu(ctx context.Context) ([]*SysMenu, error)
- AllSysRole(ctx context.Context) ([]*SysRole, error)
- CountCategoriesCondition(ctx context.Context, arg *CountCategoriesConditionParams) (int64, error)
- CountCustomers(ctx context.Context) (int64, error)
- CountProjects(ctx context.Context, status int16) (int64, error)
- CountSysAuditLogCondition(ctx context.Context, arg *CountSysAuditLogConditionParams) (int64, error)
- CountSysConfigCondition(ctx context.Context, key string) (int64, error)
- CountSysDepartmentCondition(ctx context.Context, arg *CountSysDepartmentConditionParams) (int64, error)
- CountSysRole(ctx context.Context) (int64, error)
- CountSysRoleCondition(ctx context.Context, arg *CountSysRoleConditionParams) (int64, error)
- CountSysUser(ctx context.Context) (int64, error)
- CountSysUserCondition(ctx context.Context, arg *CountSysUserConditionParams) (int64, error)
- CountSysUserLoginLogCondition(ctx context.Context, arg *CountSysUserLoginLogConditionParams) (int64, error)
- CreateBudget(ctx context.Context, arg *CreateBudgetParams) (*Budget, error)
- CreateCategory(ctx context.Context, arg *CreateCategoryParams) (*Category, error)
- CreateCustomer(ctx context.Context, arg *CreateCustomerParams) (*Customer, error)
- CreateExpense(ctx context.Context, arg *CreateExpenseParams) (*Expense, error)
- CreateIncome(ctx context.Context, arg *CreateIncomeParams) (*Income, error)
- CreateProject(ctx context.Context, arg *CreateProjectParams) (*Project, error)
- CreateProjectFile(ctx context.Context, arg *CreateProjectFileParams) (*ProjectFile, error)
- CreateRoleMenu(ctx context.Context, arg *CreateRoleMenuParams) error
- CreateSysAuditLog(ctx context.Context, arg *CreateSysAuditLogParams) error
- CreateSysConfig(ctx context.Context, arg *CreateSysConfigParams) error
- CreateSysDepartment(ctx context.Context, arg *CreateSysDepartmentParams) (*SysDepartment, error)
- CreateSysMenu(ctx context.Context, arg *CreateSysMenuParams) (*SysMenu, error)
- CreateSysRole(ctx context.Context, arg *CreateSysRoleParams) (*SysRole, error)
- CreateSysUser(ctx context.Context, arg *CreateSysUserParams) (*SysUser, error)
- CreateSysUserLoginLog(ctx context.Context, arg *CreateSysUserLoginLogParams) error
- DeleteProjectFile(ctx context.Context, projectID int64) error
- DeleteRoleMneuByRoleID(ctx context.Context, roleID int32) error
- ExistsCategories(ctx context.Context) (bool, error)
- ExistsMenu(ctx context.Context) (bool, error)
- ExistsSysConfigByKey(ctx context.Context, key string) (bool, error)
- ExistsSysDepartment(ctx context.Context) (bool, error)
- ExistsSysUser(ctx context.Context) (bool, error)
- ExistsVipRole(ctx context.Context) (bool, error)
- GetBudget(ctx context.Context, id int64) (*Budget, error)
- GetCategory(ctx context.Context, id int32) (*Category, error)
- GetCustomer(ctx context.Context, id int64) (*Customer, error)
- GetExpense(ctx context.Context, id int64) (*Expense, error)
- GetFirstVipRole(ctx context.Context) (*SysRole, error)
- GetIncome(ctx context.Context, id int64) (*Income, error)
- GetProject(ctx context.Context, id int64) (*Project, error)
- GetSysConfig(ctx context.Context, id int32) (*SysConfig, error)
- GetSysConfigByKey(ctx context.Context, key string) (*SysConfig, error)
- GetSysDepartment(ctx context.Context, id int32) (*SysDepartment, error)
- GetSysMenu(ctx context.Context, id int32) (*SysMenu, error)
- GetSysMenuByUrl(ctx context.Context, url string) (*SysMenu, error)
- GetSysRole(ctx context.Context, id int32) (*SysRole, error)
- GetSysRoleByUserID(ctx context.Context, id int32) (*SysRole, error)
- GetSysUser(ctx context.Context, id int32) (*SysUser, error)
- GetSysUserByEmail(ctx context.Context, email string) (*SysUser, error)
- ListBudgets(ctx context.Context, projectID int64) ([]*Budget, error)
- ListCategories(ctx context.Context) ([]*Category, error)
- ListCategoriesByPath(ctx context.Context, parentPath string) ([]*Category, error)
- ListCategoriesCondition(ctx context.Context, arg *ListCategoriesConditionParams) ([]*Category, error)
- ListCategoriesRecursive(ctx context.Context) ([]*ListCategoriesRecursiveRow, error)
- ListCustomers(ctx context.Context, arg *ListCustomersParams) ([]*Customer, error)
- ListProjectFiles(ctx context.Context, projectID int64) ([]*ProjectFile, error)
- ListProjects(ctx context.Context, arg *ListProjectsParams) ([]*Project, error)
- ListSysAuditLogCondition(ctx context.Context, arg *ListSysAuditLogConditionParams) ([]*SysAuditLog, error)
- ListSysConfigCondition(ctx context.Context, arg *ListSysConfigConditionParams) ([]*SysConfig, error)
- ListSysDepartment(ctx context.Context) ([]*SysDepartment, error)
- ListSysDepartmentCondition(ctx context.Context, arg *ListSysDepartmentConditionParams) ([]*SysDepartment, error)
- ListSysDepartmentRecursive(ctx context.Context) ([]*ListSysDepartmentRecursiveRow, error)
- ListSysMenuByRoleID(ctx context.Context, roleID int32) ([]*SysMenu, error)
- ListSysMenuIDByRoleID(ctx context.Context, roleID int32) ([]int32, error)
- ListSysRole(ctx context.Context) ([]*SysRole, error)
- ListSysRoleCondition(ctx context.Context, arg *ListSysRoleConditionParams) ([]*SysRole, error)
- ListSysUser(ctx context.Context) ([]*SysUser, error)
- ListSysUserByIds(ctx context.Context, dollar_1 []int32) ([]*SysUser, error)
- ListSysUserCondition(ctx context.Context, arg *ListSysUserConditionParams) ([]*ListSysUserConditionRow, error)
- ListSysUserLoginLogCondition(ctx context.Context, arg *ListSysUserLoginLogConditionParams) ([]*ListSysUserLoginLogConditionRow, error)
- RecursiveSysMenus(ctx context.Context) ([]*RecursiveSysMenusRow, error)
- RecursiveSysMenusByRoleID(ctx context.Context, roleID int32) ([]*RecursiveSysMenusByRoleIDRow, error)
- StatisticsExpense(ctx context.Context) ([]*StatisticsExpenseRow, error)
- StatisticsExpenseByProjectID(ctx context.Context, projectID int64) ([]*StatisticsExpenseByProjectIDRow, error)
- StatisticsIncome(ctx context.Context) ([]*StatisticsIncomeRow, error)
- StatisticsIncomeByProjectID(ctx context.Context, projectID int64) ([]*StatisticsIncomeByProjectIDRow, error)
- StatisticsProjectItem(ctx context.Context, id int64) (*StatisticsProjectItemRow, error)
- StatisticsProjects(ctx context.Context) ([]*StatisticsProjectsRow, error)
- SumExpense(ctx context.Context) (pgtype.Numeric, error)
- SumExpenseByProjectID(ctx context.Context, projectID int64) (pgtype.Numeric, error)
- SumIncome(ctx context.Context) (pgtype.Numeric, error)
- SumIncomeByProjectID(ctx context.Context, projectID int64) (pgtype.Numeric, error)
- UpdateBudget(ctx context.Context, arg *UpdateBudgetParams) (*Budget, error)
- UpdateCategory(ctx context.Context, arg *UpdateCategoryParams) (*Category, error)
- UpdateCustomer(ctx context.Context, arg *UpdateCustomerParams) (*Customer, error)
- UpdateExpense(ctx context.Context, arg *UpdateExpenseParams) (*Expense, error)
- UpdateIncome(ctx context.Context, arg *UpdateIncomeParams) (*Income, error)
- UpdateProject(ctx context.Context, arg *UpdateProjectParams) (*Project, error)
- UpdateSysConfigByKey(ctx context.Context, arg *UpdateSysConfigByKeyParams) error
- UpdateSysDepartment(ctx context.Context, arg *UpdateSysDepartmentParams) (*SysDepartment, error)
- UpdateSysMenu(ctx context.Context, arg *UpdateSysMenuParams) (*SysMenu, error)
- UpdateSysRole(ctx context.Context, arg *UpdateSysRoleParams) (*SysRole, error)
- UpdateSysUser(ctx context.Context, arg *UpdateSysUserParams) (*SysUser, error)
-}
-
-var _ Querier = (*Queries)(nil)
diff --git a/internal/db/sqlc/query_budget.go b/internal/db/sqlc/query_budget.go
deleted file mode 100644
index 41e4b25..0000000
--- a/internal/db/sqlc/query_budget.go
+++ /dev/null
@@ -1,131 +0,0 @@
-package db
-
-import (
- "context"
-)
-
-type ListBudgetConditionParam struct {
- TimeBegin string
- TimeEnd string
- ProjectID int64
- BudgetType int32
- Category int32
- IsTitle bool
- Title string
- Status int16
- PageID int32
- PageSize int32
-}
-
-type BudgetView struct {
- Budget
- ProjectName string `json:"project_name"`
- CategoryName string `json:"category_name"`
- CreatedName string `json:"created_name"`
- UpdatedName string `json:"updated_name"`
-}
-
-func (store *SQLStore) ListBudgetCondition(ctx context.Context, arg *ListBudgetConditionParam) ([]*BudgetView, int64, error) {
- query, args, err := BuildQuery(`
- SELECT COUNT(1)
- FROM budgets
- WHERE created_at BETWEEN @start AND @end
- {{if ne .status 9999}}AND status = @status{{end}}
- {{if ne .projecID 9999}}AND project_id = @projecID{{end}}
- {{if ne .budgetType 9999}}AND budget_type = @budgetType{{end}}
- {{if ne .category 9999}}AND category = @category{{end}}
- {{if .isTitle}}AND name LIKE @title{{end}};
- `, map[string]any{
- "projecID": arg.ProjectID,
- "budgetType": arg.BudgetType,
- "category": arg.Category,
- "start": arg.TimeBegin,
- "end": arg.TimeEnd,
- "status": arg.Status,
- "isTitle": arg.IsTitle,
- "title": arg.Title,
- })
- if err != nil {
- return nil, 0, err
- }
-
- var total int64
- if err := store.db.QueryRow(ctx, query, args...).Scan(&total); err != nil {
- return nil, 0, err
- }
-
- if total <= 0 {
- return nil, 0, nil
- }
-
- query, args, err = BuildQuery(`
- select id, name, budget_type,
- project_id, COALESCE((SELECT name FROM projects WHERE id = budgets.project_id), '') as project_name,
- category, COALESCE((SELECT name FROM categories WHERE id = budgets.category), '') as category_name,
- start_at, end_at, amount, used_amount, remaining_amount, sort, created_at,
- created_user_id, COALESCE((SELECT username FROM sys_user WHERE id = budgets.created_user_id), '') as created_name,
- updated_at,
- updated_user_id, COALESCE((SELECT username FROM sys_user WHERE id = budgets.updated_user_id), '') as updated_name
- FROM budgets
- WHERE created_at BETWEEN @start AND @end
- {{if ne .status 9999}}AND status = @status{{end}}
- {{if ne .projecID 9999}}AND project_id = @projecID{{end}}
- {{if ne .budgetType 9999}}AND budget_type = @budgetType{{end}}
- {{if ne .category 9999}}AND category = @category{{end}}
- {{if .isTitle}}AND name LIKE @title{{end}}
- ORDER BY id DESC
- LIMIT @limit OFFSET @offset;
- `, map[string]any{
- "start": arg.TimeBegin,
- "end": arg.TimeEnd,
- "projecID": arg.ProjectID,
- "budgetType": arg.BudgetType,
- "category": arg.Category,
- "status": arg.Status,
- "isTitle": arg.IsTitle,
- "title": arg.Title,
- "limit": arg.PageSize,
- "offset": (arg.PageID - 1) * arg.PageSize,
- })
- if err != nil {
- return nil, 0, err
- }
-
- rows, err := store.db.Query(ctx, query, args...)
- if err != nil {
- return nil, 0, err
- }
- defer rows.Close()
- items := []*BudgetView{}
- for rows.Next() {
- var i BudgetView
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.BudgetType,
- &i.ProjectID,
- &i.ProjectName,
- &i.Category,
- &i.CategoryName,
- &i.StartAt,
- &i.EndAt,
- &i.Amount,
- &i.UsedAmount,
- &i.RemainingAmount,
- &i.Sort,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.CreatedName,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- &i.UpdatedName,
- ); err != nil {
- return nil, 0, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, 0, err
- }
- return items, total, nil
-}
diff --git a/internal/db/sqlc/query_customer.go b/internal/db/sqlc/query_customer.go
deleted file mode 100644
index 16734d7..0000000
--- a/internal/db/sqlc/query_customer.go
+++ /dev/null
@@ -1,125 +0,0 @@
-package db
-
-import "context"
-
-type ListCustomerConditionParam struct {
- TimeBegin string
- TimeEnd string
- IsTitle bool
- Title string
- Status int16
- Category int32
- Source int32
- PageID int32
- PageSize int32
-}
-
-type CustomerView struct {
- Customer
- // 字符串ID
- SID string `json:"sid"`
- // 类别
- CategoryName string `json:"category_name"`
- // 来源
- SourceName string `json:"source_name"`
- CreatedName string `json:"created_name"`
- UpdatedName string `json:"updated_name"`
-}
-
-func (store *SQLStore) ListCustomerCondition(ctx context.Context, arg *ListCustomerConditionParam) ([]*CustomerView, int64, error) {
- query, args, err := BuildQuery(`
- SELECT COUNT(1)
- FROM customers
- WHERE created_at BETWEEN @start AND @end
- {{if ne .status 9999}}AND status = @status{{end}}
- {{if ne .category 9999}}AND category = @category{{end}}
- {{if ne .source 9999}}AND source = @source{{end}}
- {{if .isTitle}}AND name LIKE @title{{end}};
- `, map[string]interface{}{
- "start": arg.TimeBegin,
- "end": arg.TimeEnd,
- "status": arg.Status,
- "category": arg.Category,
- "source": arg.Source,
- "isTitle": arg.IsTitle,
- "title": arg.Title,
- })
- if err != nil {
- return nil, 0, err
- }
-
- var total int64
- if err := store.db.QueryRow(ctx, query, args...).Scan(&total); err != nil {
- return nil, 0, err
- }
-
- if total <= 0 {
- return nil, 0, nil
- }
-
- query, args, err = BuildQuery(`
- SELECT id, name,
- category, COALESCE((SELECT name FROM categories WHERE id = customers.category), '') as category_name,
- source, COALESCE((SELECT name FROM categories WHERE id = customers.source), '') as source_name,
- address, contact_name, contact_phone, status, sort, created_at, updated_at,
- created_by, COALESCE((SELECT username FROM sys_user WHERE id = customers.created_by), '') as created_name,
- updated_by, COALESCE((SELECT username FROM sys_user WHERE id = customers.updated_by), '') as updated_name
- FROM customers
- WHERE created_at BETWEEN @start AND @end
- {{if ne .status 9999}}AND status = @status{{end}}
- {{if ne .category 9999}}AND category = @category{{end}}
- {{if ne .source 9999}}AND source = @source{{end}}
- {{if .isTitle}}AND name LIKE @title{{end}}
- ORDER BY id DESC
- LIMIT @limit OFFSET @offset;
- `, map[string]interface{}{
- "start": arg.TimeBegin,
- "end": arg.TimeEnd,
- "status": arg.Status,
- "category": arg.Category,
- "source": arg.Source,
- "isTitle": arg.IsTitle,
- "title": arg.Title,
- "limit": arg.PageSize,
- "offset": (arg.PageID - 1) * arg.PageSize,
- })
- if err != nil {
- return nil, 0, err
- }
-
- rows, err := store.db.Query(ctx, query, args...)
- if err != nil {
- return nil, 0, err
- }
- defer rows.Close()
- items := []*CustomerView{}
- for rows.Next() {
- var i CustomerView
- if err := rows.Scan(
- &i.SID,
- &i.Name,
- &i.Category,
- &i.CategoryName,
- &i.Source,
- &i.SourceName,
- &i.Address,
- &i.ContactName,
- &i.ContactPhone,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- &i.CreatedBy,
- &i.CreatedName,
- &i.UpdatedBy,
- &i.UpdatedName,
- ); err != nil {
- return nil, 0, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, 0, err
- }
- return items, total, nil
-}
diff --git a/internal/db/sqlc/query_expenses.go b/internal/db/sqlc/query_expenses.go
deleted file mode 100644
index dc5d4ec..0000000
--- a/internal/db/sqlc/query_expenses.go
+++ /dev/null
@@ -1,132 +0,0 @@
-package db
-
-import (
- "context"
-)
-
-type ListExpenseConditionParam struct {
- TimeBegin string
- TimeEnd string
- ProjectID int64
- BudgetID int64
- ExpenseType int32
- IsTitle bool
- Title string
- Status int16
- PageID int32
- PageSize int32
-}
-
-type ExpenseView struct {
- Expense
- ProjectName string `json:"project_name"`
- BudgetName string `json:"budget_name"`
- ExpensesTypeName string `json:"expenses_type_name"`
- CreatedName string `json:"created_name"`
- UpdatedName string `json:"updated_name"`
-}
-
-func (store *SQLStore) ListExpenseCondition(ctx context.Context, arg *ListExpenseConditionParam) ([]*ExpenseView, int64, error) {
- query, args, err := BuildQuery(`
- SELECT COUNT(1)
- FROM expenses
- WHERE created_at BETWEEN @start AND @end
- {{if ne .status 9999}}AND status = @status{{end}}
- {{if ne .projecID 9999}}AND project_id = @projecID{{end}}
- {{if ne .budgetID 9999}}AND budget_id = @budgetID{{end}}
- {{if ne .expensesType 9999}}AND expenses_type = @expensesType{{end}}
- {{if .isTitle}}AND name LIKE @title{{end}};
- `, map[string]any{
- "projecID": arg.ProjectID,
- "budgetID": arg.BudgetID,
- "expensesType": arg.ExpenseType,
- "start": arg.TimeBegin,
- "end": arg.TimeEnd,
- "status": arg.Status,
- "isTitle": arg.IsTitle,
- "title": arg.Title,
- })
- if err != nil {
- return nil, 0, err
- }
-
- var total int64
- if err := store.db.QueryRow(ctx, query, args...).Scan(&total); err != nil {
- return nil, 0, err
- }
-
- if total <= 0 {
- return nil, 0, nil
- }
-
- query, args, err = BuildQuery(`
- select id,
- project_id, COALESCE((SELECT name FROM projects WHERE id = expenses.project_id), '') as project_name,
- budget_id, COALESCE((SELECT name FROM budgets WHERE id = expenses.budget_id), '') as budget_name,
- amount, expenses_at,
- expenses_type, COALESCE((SELECT name FROM categories WHERE id = expenses.expenses_type), '') as expense_type_name,
- remark, status, created_at,
- created_user_id, COALESCE((SELECT username FROM sys_user WHERE id = expenses.created_user_id), '') as created_name,
- updated_at,
- updated_user_id, COALESCE((SELECT username FROM sys_user WHERE id = expenses.updated_user_id), '') as updated_name
- FROM expenses
- WHERE created_at BETWEEN @start AND @end
- {{if ne .status 9999}}AND status = @status{{end}}
- {{if ne .projecID 9999}}AND project_id = @projecID{{end}}
- {{if ne .budgetID 9999}}AND budget_id = @budgetID{{end}}
- {{if ne .expensesType 9999}}AND expenses_type = @expensesType{{end}}
- {{if .isTitle}}AND name LIKE @title{{end}}
- ORDER BY id DESC
- LIMIT @limit OFFSET @offset;
- `, map[string]any{
- "projecID": arg.ProjectID,
- "budgetID": arg.BudgetID,
- "expensesType": arg.ExpenseType,
- "start": arg.TimeBegin,
- "end": arg.TimeEnd,
- "status": arg.Status,
- "isTitle": arg.IsTitle,
- "title": arg.Title,
- "limit": arg.PageSize,
- "offset": (arg.PageID - 1) * arg.PageSize,
- })
- if err != nil {
- return nil, 0, err
- }
-
- rows, err := store.db.Query(ctx, query, args...)
- if err != nil {
- return nil, 0, err
- }
- defer rows.Close()
- items := []*ExpenseView{}
- for rows.Next() {
- var i ExpenseView
- if err := rows.Scan(
- &i.ID,
- &i.ProjectID,
- &i.ProjectName,
- &i.BudgetID,
- &i.BudgetName,
- &i.Amount,
- &i.ExpensesAt,
- &i.ExpensesType,
- &i.ExpensesTypeName,
- &i.Remark,
- &i.Status,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.CreatedName,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- &i.UpdatedName,
- ); err != nil {
- return nil, 0, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, 0, err
- }
- return items, total, nil
-}
diff --git a/internal/db/sqlc/query_income.go b/internal/db/sqlc/query_income.go
deleted file mode 100644
index 0145450..0000000
--- a/internal/db/sqlc/query_income.go
+++ /dev/null
@@ -1,136 +0,0 @@
-package db
-
-import (
- "context"
-)
-
-type ListIncomeConditionParam struct {
- TimeBegin string
- TimeEnd string
- ProjectID int64
- BudgetID int64
- IncomeType int32
- IsTitle bool
- Title string
- Status int16
- PageID int32
- PageSize int32
-}
-
-type IncomeView struct {
- Income
- ProjectName string `json:"project_name"`
- BudgetName string `json:"budget_name"`
- IncomeTypeName string `json:"income_type_name"`
- IncomeBankName string `json:"income_bank_name"`
- CreatedName string `json:"created_name"`
- UpdatedName string `json:"updated_name"`
-}
-
-func (store *SQLStore) ListIncomeCondition(ctx context.Context, arg *ListIncomeConditionParam) ([]*IncomeView, int64, error) {
- query, args, err := BuildQuery(`
- SELECT COUNT(1)
- FROM incomes
- WHERE created_at BETWEEN @start AND @end
- {{if ne .status 9999}}AND status = @status{{end}}
- {{if ne .projecID 9999}}AND project_id = @projecID{{end}}
- {{if ne .budgetID 9999}}AND budget_id = @budgetID{{end}}
- {{if ne .incomeType 9999}}AND income_type = @incomeType{{end}}
- {{if .isTitle}}AND name LIKE @title{{end}};
- `, map[string]any{
- "projecID": arg.ProjectID,
- "budgetID": arg.BudgetID,
- "incomeType": arg.IncomeType,
- "start": arg.TimeBegin,
- "end": arg.TimeEnd,
- "status": arg.Status,
- "isTitle": arg.IsTitle,
- "title": arg.Title,
- })
- if err != nil {
- return nil, 0, err
- }
-
- var total int64
- if err := store.db.QueryRow(ctx, query, args...).Scan(&total); err != nil {
- return nil, 0, err
- }
-
- if total <= 0 {
- return nil, 0, nil
- }
-
- query, args, err = BuildQuery(`
- select id,
- project_id, COALESCE((SELECT name FROM projects WHERE id = incomes.project_id), '') as project_name,
- budget_id, COALESCE((SELECT name FROM budgets WHERE id = incomes.budget_id), '') as budget_name,
- amount, income_at,
- income_type, COALESCE((SELECT name FROM categories WHERE id = incomes.income_type), '') as income_type_name,
- income_bank, COALESCE((SELECT name FROM categories WHERE id = incomes.income_bank), '') as income_bank_name,
- remark, status, created_at,
- created_user_id, COALESCE((SELECT username FROM sys_user WHERE id = incomes.created_user_id), '') as created_name,
- updated_at,
- updated_user_id, COALESCE((SELECT username FROM sys_user WHERE id = incomes.updated_user_id), '') as updated_name
- FROM incomes
- WHERE created_at BETWEEN @start AND @end
- {{if ne .status 9999}}AND status = @status{{end}}
- {{if ne .projecID 9999}}AND project_id = @projecID{{end}}
- {{if ne .budgetID 9999}}AND budget_id = @budgetID{{end}}
- {{if ne .incomeType 9999}}AND income_type = @incomeType{{end}}
- {{if .isTitle}}AND name LIKE @title{{end}}
- ORDER BY id DESC
- LIMIT @limit OFFSET @offset;
- `, map[string]any{
- "projecID": arg.ProjectID,
- "budgetID": arg.BudgetID,
- "incomeType": arg.IncomeType,
- "start": arg.TimeBegin,
- "end": arg.TimeEnd,
- "status": arg.Status,
- "isTitle": arg.IsTitle,
- "title": arg.Title,
- "limit": arg.PageSize,
- "offset": (arg.PageID - 1) * arg.PageSize,
- })
- if err != nil {
- return nil, 0, err
- }
-
- rows, err := store.db.Query(ctx, query, args...)
- if err != nil {
- return nil, 0, err
- }
- defer rows.Close()
- items := []*IncomeView{}
- for rows.Next() {
- var i IncomeView
- if err := rows.Scan(
- &i.ID,
- &i.ProjectID,
- &i.ProjectName,
- &i.BudgetID,
- &i.BudgetName,
- &i.Amount,
- &i.IncomeAt,
- &i.IncomeType,
- &i.IncomeTypeName,
- &i.IncomeBank,
- &i.IncomeBankName,
- &i.Remark,
- &i.Status,
- &i.CreatedAt,
- &i.CreatedUserID,
- &i.CreatedName,
- &i.UpdatedAt,
- &i.UpdatedUserID,
- &i.UpdatedName,
- ); err != nil {
- return nil, 0, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, 0, err
- }
- return items, total, nil
-}
diff --git a/internal/db/sqlc/query_project.go b/internal/db/sqlc/query_project.go
deleted file mode 100644
index eae2721..0000000
--- a/internal/db/sqlc/query_project.go
+++ /dev/null
@@ -1,131 +0,0 @@
-package db
-
-import (
- "context"
-)
-
-type ListProjectConditionParam struct {
- TimeBegin string
- TimeEnd string
- IsTitle bool
- Title string
- Status int16
- PageID int32
- PageSize int32
-}
-
-type ProjectView struct {
- Project
- // 字符串ID
- SID string `json:"sid"`
- CustomerName string `json:"customer_name"`
- ApplyName string `json:"apply_name"`
- CreatedName string `json:"created_name"`
- UpdatedName string `json:"updated_name"`
- StatusName string `json:"status_name"`
- ManagerName string `json:"manager_name"`
- MemberNames string `json:"member_names"`
-}
-
-func (store *SQLStore) ListProjectCondition(ctx context.Context, arg *ListProjectConditionParam) ([]*ProjectView, int64, error) {
- query, args, err := BuildQuery(`
- SELECT COUNT(1)
- FROM projects
- WHERE created_at BETWEEN @start AND @end
- {{if ne .status 9999}}AND status = @status{{end}}
- {{if .isTitle}}AND name LIKE @title{{end}};
- `, map[string]any{
- "start": arg.TimeBegin,
- "end": arg.TimeEnd,
- "status": arg.Status,
- "isTitle": arg.IsTitle,
- "title": arg.Title,
- })
- if err != nil {
- return nil, 0, err
- }
-
- var total int64
- if err := store.db.QueryRow(ctx, query, args...).Scan(&total); err != nil {
- return nil, 0, err
- }
-
- if total <= 0 {
- return nil, 0, nil
- }
-
- query, args, err = BuildQuery(`
- SELECT id, name, start_at, end_at, customer_id, total_money, description, apply_at,
- COALESCE((SELECT name FROM customers WHERE id = projects.customer_id), '') as customer_name,
- COALESCE((SELECT username FROM sys_user WHERE id = projects.apply_user_id), '') as apply_name,
- status, sort, created_at, updated_at,
- created_user_id, COALESCE((SELECT username FROM sys_user WHERE id = projects.created_user_id), '') as created_name,
- updated_user_id, COALESCE((SELECT username FROM sys_user WHERE id = projects.updated_user_id), '') as updated_name,
- (CASE
- WHEN status=-1 THEN '已删除'
- WHEN status=0 THEN '未开始'
- WHEN status=10 THEN '进行中'
- WHEN status=20 THEN '已结项'
- ELSE '未知'
- END) as status_name,
- COALESCE((SELECT username FROM sys_user WHERE id = projects.manager_id), '') as manager_name,
- COALESCE((SELECT string_agg(username, ',') FROM sys_user WHERE id::text = ANY (string_to_array(projects.members, ','))), '') as member_names
- FROM projects
- WHERE created_at BETWEEN @start AND @end
- {{if ne .status 9999}}AND status = @status{{end}}
- {{if .isTitle}}AND name LIKE @title{{end}}
- ORDER BY id DESC
- LIMIT @limit OFFSET @offset;
- `, map[string]any{
- "start": arg.TimeBegin,
- "end": arg.TimeEnd,
- "status": arg.Status,
- "isTitle": arg.IsTitle,
- "title": arg.Title,
- "limit": arg.PageSize,
- "offset": (arg.PageID - 1) * arg.PageSize,
- })
- if err != nil {
- return nil, 0, err
- }
-
- rows, err := store.db.Query(ctx, query, args...)
- if err != nil {
- return nil, 0, err
- }
- defer rows.Close()
- items := []*ProjectView{}
- for rows.Next() {
- var i ProjectView
- if err := rows.Scan(
- &i.SID,
- &i.Name,
- &i.StartAt,
- &i.EndAt,
- &i.CustomerID,
- &i.TotalMoney,
- &i.Description,
- &i.ApplyAt,
- &i.CustomerName,
- &i.ApplyName,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- &i.CreatedUserID,
- &i.CreatedName,
- &i.UpdatedUserID,
- &i.UpdatedName,
- &i.StatusName,
- &i.ManagerName,
- &i.MemberNames,
- ); err != nil {
- return nil, 0, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, 0, err
- }
- return items, total, nil
-}
diff --git a/internal/db/sqlc/store.go b/internal/db/sqlc/store.go
deleted file mode 100644
index b6daa48..0000000
--- a/internal/db/sqlc/store.go
+++ /dev/null
@@ -1,201 +0,0 @@
-package db
-
-import (
- "context"
- "errors"
- "fmt"
-
- "management/internal/pkg/config"
-
- "github.com/jackc/pgconn"
- "github.com/jackc/pgx/v5"
- "github.com/jackc/pgx/v5/pgxpool"
-)
-
-// ****************** conn ******************
-
-func newDsn(conf config.DB) string {
- return fmt.Sprintf("postgresql://%s:%s@%s:%d/%s?sslmode=disable",
- conf.Username,
- conf.Password,
- conf.Host,
- conf.Port,
- conf.DBName)
-}
-
-// ****************** errors ******************
-
-const (
- foreignKeyViolation = "23503"
- uniqueViolation = "23505"
-)
-
-// var ErrUniqueViolation = &pgconn.PgError{
-// Code: UniqueViolation,
-// }
-
-func ErrorCode(err error) string {
- var pgErr *pgconn.PgError
- if errors.As(err, &pgErr) {
- return pgErr.Code
- }
- return ""
-}
-
-// ****************** store ******************
-var Engine Store
-
-// Store defines all functions to execute db queries and transactions
-type Store interface {
- Querier
- ExecTx(context.Context, func(*Queries) error) error
-
- Pool() *pgxpool.Pool
-
- SysDepartmentRebuildPath(ctx context.Context) error
- SysRoleRebuildPath(ctx context.Context) error
- CategoryRebuildPath(ctx context.Context) error
-
- ListCustomerCondition(ctx context.Context, arg *ListCustomerConditionParam) ([]*CustomerView, int64, error)
- ListProjectCondition(ctx context.Context, arg *ListProjectConditionParam) ([]*ProjectView, int64, error)
- ListBudgetCondition(ctx context.Context, arg *ListBudgetConditionParam) ([]*BudgetView, int64, error)
- ListIncomeCondition(ctx context.Context, arg *ListIncomeConditionParam) ([]*IncomeView, int64, error)
- ListExpenseCondition(ctx context.Context, arg *ListExpenseConditionParam) ([]*ExpenseView, int64, error)
-}
-
-// SQLStore provides all functions to execute SQL queries and transactions
-type SQLStore struct {
- connPool *pgxpool.Pool
- *Queries
-}
-
-func NewIStore(ctx context.Context, conf config.DB) (Store, error) {
- pool, err := pgxpool.New(ctx, newDsn(conf))
- if err != nil {
- return nil, err
- }
-
- err = pool.Ping(ctx)
- if err != nil {
- return nil, err
- }
-
- return &SQLStore{
- connPool: pool,
- Queries: New(pool),
- }, nil
-}
-
-// NewStore creates a new store
-func NewStore(ctx context.Context) error {
- pool, err := pgxpool.New(ctx, newDsn(config.File.DB))
- if err != nil {
- return err
- }
-
- err = pool.Ping(ctx)
- if err != nil {
- return err
- }
-
- Engine = &SQLStore{
- connPool: pool,
- Queries: New(pool),
- }
-
- return nil
-}
-
-func (store *SQLStore) Pool() *pgxpool.Pool {
- return store.connPool
-}
-
-func IsUniqueViolation(err error) bool {
- return ErrorCode(err) == uniqueViolation
-}
-
-func IsForeignKeyViolation(err error) bool {
- return ErrorCode(err) == foreignKeyViolation
-}
-
-func IsNoRows(err error) bool {
- return errors.Is(err, pgx.ErrNoRows)
-}
-
-func (store *SQLStore) ExecTx(ctx context.Context, fn func(*Queries) error) error {
- tx, err := store.connPool.Begin(ctx)
- if err != nil {
- return err
- }
-
- q := New(tx)
- err = fn(q)
- if err != nil {
- if rbErr := tx.Rollback(ctx); rbErr != nil {
- return fmt.Errorf("tx err: %v, rb err: %v", err, rbErr)
- }
- return err
- }
-
- return tx.Commit(ctx)
-}
-
-func (store *SQLStore) SysDepartmentRebuildPath(ctx context.Context) error {
- query := `
- UPDATE sys_department AS tm
- SET parent_path = (SELECT ',' || string_agg(cast(t.parent_id AS VARCHAR), ',') || ','
- FROM (WITH RECURSIVE temp (id, parent_id) AS (SELECT id, tm.parent_id
- FROM sys_department
- WHERE id = tm.id
- UNION ALL
- SELECT sys_department.id, sys_department.parent_id
- FROM sys_department,
- temp
- WHERE sys_department.id = temp.parent_id)
- SELECT id, parent_id
- FROM temp
- ORDER BY id) AS t)
- WHERE tm.status = 0 ;`
- _, err := store.db.Exec(ctx, query)
- return err
-}
-
-func (store *SQLStore) SysRoleRebuildPath(ctx context.Context) error {
- query := `
- UPDATE sys_role AS tm
- SET parent_path = (SELECT ',' || string_agg(cast(t.parent_id AS VARCHAR), ',') || ','
- FROM (WITH RECURSIVE temp (id, parent_id) AS (SELECT id, tm.parent_id
- FROM sys_role
- WHERE id = tm.id
- UNION ALL
- SELECT sys_role.id, sys_role.parent_id
- FROM sys_role,
- temp
- WHERE sys_role.id = temp.parent_id)
- SELECT id, parent_id
- FROM temp
- ORDER BY id) AS t)
- WHERE tm.status = 0;`
- _, err := store.db.Exec(ctx, query)
- return err
-}
-
-func (store *SQLStore) CategoryRebuildPath(ctx context.Context) error {
- query := `
- UPDATE categories AS tm
- SET parent_path = (SELECT ',' || string_agg(cast(t.parent_id AS VARCHAR), ',') || ','
- FROM (WITH RECURSIVE temp (id, parent_id) AS (SELECT id, tm.parent_id
- FROM categories
- WHERE id = tm.id
- UNION ALL
- SELECT categories.id, categories.parent_id
- FROM categories,
- temp
- WHERE categories.id = temp.parent_id)
- SELECT id, parent_id
- FROM temp
- ORDER BY id) AS t)
- WHERE tm.status = 0;`
- _, err := store.db.Exec(ctx, query)
- return err
-}
diff --git a/internal/db/sqlc/sys_audit_log.sql.go b/internal/db/sqlc/sys_audit_log.sql.go
deleted file mode 100644
index f4bcd0c..0000000
--- a/internal/db/sqlc/sys_audit_log.sql.go
+++ /dev/null
@@ -1,160 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: sys_audit_log.sql
-
-package db
-
-import (
- "context"
- "time"
-
- "github.com/google/uuid"
-)
-
-const countSysAuditLogCondition = `-- name: CountSysAuditLogCondition :one
-SELECT COUNT(*) FROM sys_audit_log
-WHERE created_at BETWEEN $1 AND $2
- AND ($3::text = '' OR email ILIKE '%' || $3 || '%')
- AND ($4::text = '' OR username ILIKE '%' || $4 || '%')
-`
-
-type CountSysAuditLogConditionParams struct {
- StartAt time.Time `json:"start_at"`
- EndAt time.Time `json:"end_at"`
- Email string `json:"email"`
- Username string `json:"username"`
-}
-
-func (q *Queries) CountSysAuditLogCondition(ctx context.Context, arg *CountSysAuditLogConditionParams) (int64, error) {
- row := q.db.QueryRow(ctx, countSysAuditLogCondition,
- arg.StartAt,
- arg.EndAt,
- arg.Email,
- arg.Username,
- )
- var count int64
- err := row.Scan(&count)
- return count, err
-}
-
-const createSysAuditLog = `-- name: CreateSysAuditLog :exec
-INSERT INTO sys_audit_log (created_at,
- email,
- username,
- user_uuid,
- start_at,
- end_at,
- duration,
- url,
- method,
- parameters,
- referer_url,
- os,
- ip,
- browser,
- remark)
-VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15)
-`
-
-type CreateSysAuditLogParams struct {
- CreatedAt time.Time `json:"created_at"`
- Email string `json:"email"`
- Username string `json:"username"`
- UserUuid uuid.UUID `json:"user_uuid"`
- StartAt time.Time `json:"start_at"`
- EndAt time.Time `json:"end_at"`
- Duration string `json:"duration"`
- Url string `json:"url"`
- Method string `json:"method"`
- Parameters string `json:"parameters"`
- RefererUrl string `json:"referer_url"`
- Os string `json:"os"`
- Ip string `json:"ip"`
- Browser string `json:"browser"`
- Remark string `json:"remark"`
-}
-
-func (q *Queries) CreateSysAuditLog(ctx context.Context, arg *CreateSysAuditLogParams) error {
- _, err := q.db.Exec(ctx, createSysAuditLog,
- arg.CreatedAt,
- arg.Email,
- arg.Username,
- arg.UserUuid,
- arg.StartAt,
- arg.EndAt,
- arg.Duration,
- arg.Url,
- arg.Method,
- arg.Parameters,
- arg.RefererUrl,
- arg.Os,
- arg.Ip,
- arg.Browser,
- arg.Remark,
- )
- return err
-}
-
-const listSysAuditLogCondition = `-- name: ListSysAuditLogCondition :many
-SELECT id, created_at, email, username, user_uuid, start_at, end_at, duration, url, method, parameters, referer_url, os, ip, browser, remark FROM sys_audit_log
-WHERE created_at BETWEEN $1 AND $2
- AND ($3::text = '' OR email ILIKE '%' || $3 || '%')
- AND ($4::text = '' OR username ILIKE '%' || $4 || '%')
-ORDER BY created_at DESC
-OFFSET $5
-LIMIT $6
-`
-
-type ListSysAuditLogConditionParams struct {
- StartAt time.Time `json:"start_at"`
- EndAt time.Time `json:"end_at"`
- Email string `json:"email"`
- Username string `json:"username"`
- Skip int32 `json:"skip"`
- Size int32 `json:"size"`
-}
-
-func (q *Queries) ListSysAuditLogCondition(ctx context.Context, arg *ListSysAuditLogConditionParams) ([]*SysAuditLog, error) {
- rows, err := q.db.Query(ctx, listSysAuditLogCondition,
- arg.StartAt,
- arg.EndAt,
- arg.Email,
- arg.Username,
- arg.Skip,
- arg.Size,
- )
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*SysAuditLog{}
- for rows.Next() {
- var i SysAuditLog
- if err := rows.Scan(
- &i.ID,
- &i.CreatedAt,
- &i.Email,
- &i.Username,
- &i.UserUuid,
- &i.StartAt,
- &i.EndAt,
- &i.Duration,
- &i.Url,
- &i.Method,
- &i.Parameters,
- &i.RefererUrl,
- &i.Os,
- &i.Ip,
- &i.Browser,
- &i.Remark,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
diff --git a/internal/db/sqlc/sys_config.sql.go b/internal/db/sqlc/sys_config.sql.go
deleted file mode 100644
index 418a3a2..0000000
--- a/internal/db/sqlc/sys_config.sql.go
+++ /dev/null
@@ -1,151 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: sys_config.sql
-
-package db
-
-import (
- "context"
-)
-
-const countSysConfigCondition = `-- name: CountSysConfigCondition :one
-SELECT COUNT(*) FROM sys_config
-WHERE ($1::text = '' OR key ILIKE '%' || $1 || '%')
-`
-
-func (q *Queries) CountSysConfigCondition(ctx context.Context, key string) (int64, error) {
- row := q.db.QueryRow(ctx, countSysConfigCondition, key)
- var count int64
- err := row.Scan(&count)
- return count, err
-}
-
-const createSysConfig = `-- name: CreateSysConfig :exec
-INSERT INTO sys_config (
- key,
- value
-) VALUES (
- $1, $2
-)
-`
-
-type CreateSysConfigParams struct {
- Key string `json:"key"`
- Value []byte `json:"value"`
-}
-
-func (q *Queries) CreateSysConfig(ctx context.Context, arg *CreateSysConfigParams) error {
- _, err := q.db.Exec(ctx, createSysConfig, arg.Key, arg.Value)
- return err
-}
-
-const existsSysConfigByKey = `-- name: ExistsSysConfigByKey :one
-SELECT EXISTS (
- SELECT 1 FROM sys_config WHERE key = $1
-)
-`
-
-func (q *Queries) ExistsSysConfigByKey(ctx context.Context, key string) (bool, error) {
- row := q.db.QueryRow(ctx, existsSysConfigByKey, key)
- var exists bool
- err := row.Scan(&exists)
- return exists, err
-}
-
-const getSysConfig = `-- name: GetSysConfig :one
-SELECT id, key, value, created_at, updated_at
-FROM sys_config
-WHERE id = $1
-LIMIT 1
-`
-
-func (q *Queries) GetSysConfig(ctx context.Context, id int32) (*SysConfig, error) {
- row := q.db.QueryRow(ctx, getSysConfig, id)
- var i SysConfig
- err := row.Scan(
- &i.ID,
- &i.Key,
- &i.Value,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const getSysConfigByKey = `-- name: GetSysConfigByKey :one
-SELECT id, key, value, created_at, updated_at
-FROM sys_config
-WHERE key = $1
-LIMIT 1
-`
-
-func (q *Queries) GetSysConfigByKey(ctx context.Context, key string) (*SysConfig, error) {
- row := q.db.QueryRow(ctx, getSysConfigByKey, key)
- var i SysConfig
- err := row.Scan(
- &i.ID,
- &i.Key,
- &i.Value,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const listSysConfigCondition = `-- name: ListSysConfigCondition :many
-SELECT id, key, value, created_at, updated_at
-FROM sys_config
-WHERE ($1::text = '' OR key ILIKE '%' || $1 || '%')
-ORDER BY created_at DESC
-OFFSET $2
-LIMIT $3
-`
-
-type ListSysConfigConditionParams struct {
- Key string `json:"key"`
- Skip int32 `json:"skip"`
- Size int32 `json:"size"`
-}
-
-func (q *Queries) ListSysConfigCondition(ctx context.Context, arg *ListSysConfigConditionParams) ([]*SysConfig, error) {
- rows, err := q.db.Query(ctx, listSysConfigCondition, arg.Key, arg.Skip, arg.Size)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*SysConfig{}
- for rows.Next() {
- var i SysConfig
- if err := rows.Scan(
- &i.ID,
- &i.Key,
- &i.Value,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const updateSysConfigByKey = `-- name: UpdateSysConfigByKey :exec
-UPDATE sys_config
-SET value = $2
-WHERE key = $1
-`
-
-type UpdateSysConfigByKeyParams struct {
- Key string `json:"key"`
- Value []byte `json:"value"`
-}
-
-func (q *Queries) UpdateSysConfigByKey(ctx context.Context, arg *UpdateSysConfigByKeyParams) error {
- _, err := q.db.Exec(ctx, updateSysConfigByKey, arg.Key, arg.Value)
- return err
-}
diff --git a/internal/db/sqlc/sys_department.sql.go b/internal/db/sqlc/sys_department.sql.go
deleted file mode 100644
index 53d10d3..0000000
--- a/internal/db/sqlc/sys_department.sql.go
+++ /dev/null
@@ -1,357 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: sys_department.sql
-
-package db
-
-import (
- "context"
- "time"
-)
-
-const allSysDepartment = `-- name: AllSysDepartment :many
-SELECT id, name, parent_id, parent_path, status, sort, created_at, updated_at FROM sys_department
-WHERE status = 0
-ORDER BY sort DESC
-`
-
-func (q *Queries) AllSysDepartment(ctx context.Context) ([]*SysDepartment, error) {
- rows, err := q.db.Query(ctx, allSysDepartment)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*SysDepartment{}
- for rows.Next() {
- var i SysDepartment
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const countSysDepartmentCondition = `-- name: CountSysDepartmentCondition :one
-SELECT COUNT(*) FROM sys_department
-WHERE (NOT $1::Boolean OR status = $2)
- AND (NOT $3::Boolean OR id = $4)
- AND (NOT $5::Boolean OR parent_id = $6)
- AND ($7::text = '' OR name ILIKE '%' || $7 || '%')
-`
-
-type CountSysDepartmentConditionParams struct {
- IsStatus bool `json:"is_status"`
- Status int32 `json:"status"`
- IsID bool `json:"is_id"`
- ID int32 `json:"id"`
- IsParentID bool `json:"is_parent_id"`
- ParentID int32 `json:"parent_id"`
- Name string `json:"name"`
-}
-
-func (q *Queries) CountSysDepartmentCondition(ctx context.Context, arg *CountSysDepartmentConditionParams) (int64, error) {
- row := q.db.QueryRow(ctx, countSysDepartmentCondition,
- arg.IsStatus,
- arg.Status,
- arg.IsID,
- arg.ID,
- arg.IsParentID,
- arg.ParentID,
- arg.Name,
- )
- var count int64
- err := row.Scan(&count)
- return count, err
-}
-
-const createSysDepartment = `-- name: CreateSysDepartment :one
-INSERT INTO sys_department (
- name,
- parent_id,
- parent_path,
- status,
- sort,
- created_at,
- updated_at
-) VALUES (
- $1, $2, $3, $4, $5, $6, $7
-) RETURNING id, name, parent_id, parent_path, status, sort, created_at, updated_at
-`
-
-type CreateSysDepartmentParams struct {
- Name string `json:"name"`
- ParentID int32 `json:"parent_id"`
- ParentPath string `json:"parent_path"`
- Status int32 `json:"status"`
- Sort int32 `json:"sort"`
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-func (q *Queries) CreateSysDepartment(ctx context.Context, arg *CreateSysDepartmentParams) (*SysDepartment, error) {
- row := q.db.QueryRow(ctx, createSysDepartment,
- arg.Name,
- arg.ParentID,
- arg.ParentPath,
- arg.Status,
- arg.Sort,
- arg.CreatedAt,
- arg.UpdatedAt,
- )
- var i SysDepartment
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const existsSysDepartment = `-- name: ExistsSysDepartment :one
-SELECT EXISTS (
- SELECT 1 FROM sys_department
-)
-`
-
-func (q *Queries) ExistsSysDepartment(ctx context.Context) (bool, error) {
- row := q.db.QueryRow(ctx, existsSysDepartment)
- var exists bool
- err := row.Scan(&exists)
- return exists, err
-}
-
-const getSysDepartment = `-- name: GetSysDepartment :one
-SELECT id, name, parent_id, parent_path, status, sort, created_at, updated_at FROM sys_department
-WHERE id = $1 LIMIT 1
-`
-
-func (q *Queries) GetSysDepartment(ctx context.Context, id int32) (*SysDepartment, error) {
- row := q.db.QueryRow(ctx, getSysDepartment, id)
- var i SysDepartment
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const listSysDepartment = `-- name: ListSysDepartment :many
-SELECT id, name, parent_id, parent_path, status, sort, created_at, updated_at FROM sys_department
-WHERE status = 0
-`
-
-func (q *Queries) ListSysDepartment(ctx context.Context) ([]*SysDepartment, error) {
- rows, err := q.db.Query(ctx, listSysDepartment)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*SysDepartment{}
- for rows.Next() {
- var i SysDepartment
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const listSysDepartmentCondition = `-- name: ListSysDepartmentCondition :many
-SELECT id, name, parent_id, parent_path, status, sort, created_at, updated_at FROM sys_department
-WHERE (NOT $1::Boolean OR status = $2)
- AND (NOT $3::Boolean OR id = $4)
- AND (NOT $5::Boolean OR parent_id = $6)
- AND ($7::text = '' OR name ILIKE '%' || $7 || '%')
-ORDER BY created_at DESC
-OFFSET $8
-LIMIT $9
-`
-
-type ListSysDepartmentConditionParams struct {
- IsStatus bool `json:"is_status"`
- Status int32 `json:"status"`
- IsID bool `json:"is_id"`
- ID int32 `json:"id"`
- IsParentID bool `json:"is_parent_id"`
- ParentID int32 `json:"parent_id"`
- Name string `json:"name"`
- Skip int32 `json:"skip"`
- Size int32 `json:"size"`
-}
-
-func (q *Queries) ListSysDepartmentCondition(ctx context.Context, arg *ListSysDepartmentConditionParams) ([]*SysDepartment, error) {
- rows, err := q.db.Query(ctx, listSysDepartmentCondition,
- arg.IsStatus,
- arg.Status,
- arg.IsID,
- arg.ID,
- arg.IsParentID,
- arg.ParentID,
- arg.Name,
- arg.Skip,
- arg.Size,
- )
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*SysDepartment{}
- for rows.Next() {
- var i SysDepartment
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const listSysDepartmentRecursive = `-- name: ListSysDepartmentRecursive :many
-WITH RECURSIVE dist AS (SELECT sys_department.id, sys_department.name, sys_department.parent_id, sys_department.parent_path, sys_department.status, sys_department.sort, sys_department.created_at, sys_department.updated_at
- FROM sys_department
- WHERE status = 0
- UNION ALL
- SELECT sys_department.id, sys_department.name, sys_department.parent_id, sys_department.parent_path, sys_department.status, sys_department.sort, sys_department.created_at, sys_department.updated_at
- FROM sys_department,
- dist
- WHERE sys_department.id = dist.parent_id)
-SELECT DISTINCT id, name, parent_id, parent_path, status, sort, created_at, updated_at
-FROM dist
-ORDER BY sort DESC
-`
-
-type ListSysDepartmentRecursiveRow struct {
- ID int32 `json:"id"`
- Name string `json:"name"`
- ParentID int32 `json:"parent_id"`
- ParentPath string `json:"parent_path"`
- Status int32 `json:"status"`
- Sort int32 `json:"sort"`
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-func (q *Queries) ListSysDepartmentRecursive(ctx context.Context) ([]*ListSysDepartmentRecursiveRow, error) {
- rows, err := q.db.Query(ctx, listSysDepartmentRecursive)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*ListSysDepartmentRecursiveRow{}
- for rows.Next() {
- var i ListSysDepartmentRecursiveRow
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const updateSysDepartment = `-- name: UpdateSysDepartment :one
-UPDATE sys_department
-SET name = $2,
- parent_id = $3,
- parent_path = $4,
- status = $5,
- sort = $6,
- updated_at = $7
-WHERE id = $1
-RETURNING id, name, parent_id, parent_path, status, sort, created_at, updated_at
-`
-
-type UpdateSysDepartmentParams struct {
- ID int32 `json:"id"`
- Name string `json:"name"`
- ParentID int32 `json:"parent_id"`
- ParentPath string `json:"parent_path"`
- Status int32 `json:"status"`
- Sort int32 `json:"sort"`
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-func (q *Queries) UpdateSysDepartment(ctx context.Context, arg *UpdateSysDepartmentParams) (*SysDepartment, error) {
- row := q.db.QueryRow(ctx, updateSysDepartment,
- arg.ID,
- arg.Name,
- arg.ParentID,
- arg.ParentPath,
- arg.Status,
- arg.Sort,
- arg.UpdatedAt,
- )
- var i SysDepartment
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.ParentID,
- &i.ParentPath,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
diff --git a/internal/db/sqlc/sys_menu.sql.go b/internal/db/sqlc/sys_menu.sql.go
deleted file mode 100644
index 1af092a..0000000
--- a/internal/db/sqlc/sys_menu.sql.go
+++ /dev/null
@@ -1,482 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: sys_menu.sql
-
-package db
-
-import (
- "context"
- "time"
-)
-
-const allSysMenu = `-- name: AllSysMenu :many
-SELECT id, name, display_name, url, type, parent_id, parent_path, avatar, style, visible, is_list, status, sort, created_at, updated_at FROM sys_menu
-WHERE status = 0
-ORDER BY sort DESC
-`
-
-func (q *Queries) AllSysMenu(ctx context.Context) ([]*SysMenu, error) {
- rows, err := q.db.Query(ctx, allSysMenu)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*SysMenu{}
- for rows.Next() {
- var i SysMenu
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.Url,
- &i.Type,
- &i.ParentID,
- &i.ParentPath,
- &i.Avatar,
- &i.Style,
- &i.Visible,
- &i.IsList,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const createSysMenu = `-- name: CreateSysMenu :one
-INSERT INTO sys_menu (
- name,
- display_name,
- url,
- type,
- parent_id,
- parent_path,
- avatar,
- style,
- visible,
- is_list,
- status,
- sort,
- created_at,
- updated_at
-) VALUES (
- $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14
-) RETURNING id, name, display_name, url, type, parent_id, parent_path, avatar, style, visible, is_list, status, sort, created_at, updated_at
-`
-
-type CreateSysMenuParams struct {
- Name string `json:"name"`
- DisplayName string `json:"display_name"`
- Url string `json:"url"`
- Type string `json:"type"`
- ParentID int32 `json:"parent_id"`
- ParentPath string `json:"parent_path"`
- Avatar string `json:"avatar"`
- Style string `json:"style"`
- Visible bool `json:"visible"`
- IsList bool `json:"is_list"`
- Status int32 `json:"status"`
- Sort int32 `json:"sort"`
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-func (q *Queries) CreateSysMenu(ctx context.Context, arg *CreateSysMenuParams) (*SysMenu, error) {
- row := q.db.QueryRow(ctx, createSysMenu,
- arg.Name,
- arg.DisplayName,
- arg.Url,
- arg.Type,
- arg.ParentID,
- arg.ParentPath,
- arg.Avatar,
- arg.Style,
- arg.Visible,
- arg.IsList,
- arg.Status,
- arg.Sort,
- arg.CreatedAt,
- arg.UpdatedAt,
- )
- var i SysMenu
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.Url,
- &i.Type,
- &i.ParentID,
- &i.ParentPath,
- &i.Avatar,
- &i.Style,
- &i.Visible,
- &i.IsList,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const existsMenu = `-- name: ExistsMenu :one
-SELECT EXISTS (
- SELECT 1 FROM sys_menu
-)
-`
-
-func (q *Queries) ExistsMenu(ctx context.Context) (bool, error) {
- row := q.db.QueryRow(ctx, existsMenu)
- var exists bool
- err := row.Scan(&exists)
- return exists, err
-}
-
-const getSysMenu = `-- name: GetSysMenu :one
-SELECT id, name, display_name, url, type, parent_id, parent_path, avatar, style, visible, is_list, status, sort, created_at, updated_at FROM sys_menu
-WHERE id = $1 LIMIT 1
-`
-
-func (q *Queries) GetSysMenu(ctx context.Context, id int32) (*SysMenu, error) {
- row := q.db.QueryRow(ctx, getSysMenu, id)
- var i SysMenu
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.Url,
- &i.Type,
- &i.ParentID,
- &i.ParentPath,
- &i.Avatar,
- &i.Style,
- &i.Visible,
- &i.IsList,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const getSysMenuByUrl = `-- name: GetSysMenuByUrl :one
-SELECT id, name, display_name, url, type, parent_id, parent_path, avatar, style, visible, is_list, status, sort, created_at, updated_at FROM sys_menu
-WHERE url = $1 LIMIT 1
-`
-
-func (q *Queries) GetSysMenuByUrl(ctx context.Context, url string) (*SysMenu, error) {
- row := q.db.QueryRow(ctx, getSysMenuByUrl, url)
- var i SysMenu
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.Url,
- &i.Type,
- &i.ParentID,
- &i.ParentPath,
- &i.Avatar,
- &i.Style,
- &i.Visible,
- &i.IsList,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const listSysMenuByRoleID = `-- name: ListSysMenuByRoleID :many
-SELECT id, name, display_name, url, type, parent_id, parent_path, avatar, style, visible, is_list, status, sort, created_at, updated_at FROM sys_menu
-WHERE id IN (SELECT menu_id
- FROM sys_role_menu
- WHERE role_id = $1)
-`
-
-func (q *Queries) ListSysMenuByRoleID(ctx context.Context, roleID int32) ([]*SysMenu, error) {
- rows, err := q.db.Query(ctx, listSysMenuByRoleID, roleID)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*SysMenu{}
- for rows.Next() {
- var i SysMenu
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.Url,
- &i.Type,
- &i.ParentID,
- &i.ParentPath,
- &i.Avatar,
- &i.Style,
- &i.Visible,
- &i.IsList,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const listSysMenuIDByRoleID = `-- name: ListSysMenuIDByRoleID :many
-SELECT menu_id
-FROM sys_role_menu
-WHERE role_id = $1
-`
-
-func (q *Queries) ListSysMenuIDByRoleID(ctx context.Context, roleID int32) ([]int32, error) {
- rows, err := q.db.Query(ctx, listSysMenuIDByRoleID, roleID)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []int32{}
- for rows.Next() {
- var menu_id int32
- if err := rows.Scan(&menu_id); err != nil {
- return nil, err
- }
- items = append(items, menu_id)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const recursiveSysMenus = `-- name: RecursiveSysMenus :many
-WITH RECURSIVE dist AS (SELECT sys_menu.id, sys_menu.name, sys_menu.display_name, sys_menu.url, sys_menu.type, sys_menu.parent_id, sys_menu.parent_path, sys_menu.avatar, sys_menu.style, sys_menu.visible, sys_menu.is_list, sys_menu.status, sys_menu.sort, sys_menu.created_at, sys_menu.updated_at
- FROM sys_menu
- WHERE status = 0
- AND is_list = true
- UNION ALL
- SELECT sys_menu.id, sys_menu.name, sys_menu.display_name, sys_menu.url, sys_menu.type, sys_menu.parent_id, sys_menu.parent_path, sys_menu.avatar, sys_menu.style, sys_menu.visible, sys_menu.is_list, sys_menu.status, sys_menu.sort, sys_menu.created_at, sys_menu.updated_at
- FROM sys_menu,
- dist
- WHERE sys_menu.id = dist.parent_id)
-SELECT id, name, display_name, url, type, parent_id, parent_path, avatar, style, visible, is_list, status, sort, created_at, updated_at
-FROM dist
-ORDER BY dist.sort DESC, dist.id ASC
-`
-
-type RecursiveSysMenusRow struct {
- ID int32 `json:"id"`
- Name string `json:"name"`
- DisplayName string `json:"display_name"`
- Url string `json:"url"`
- Type string `json:"type"`
- ParentID int32 `json:"parent_id"`
- ParentPath string `json:"parent_path"`
- Avatar string `json:"avatar"`
- Style string `json:"style"`
- Visible bool `json:"visible"`
- IsList bool `json:"is_list"`
- Status int32 `json:"status"`
- Sort int32 `json:"sort"`
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-func (q *Queries) RecursiveSysMenus(ctx context.Context) ([]*RecursiveSysMenusRow, error) {
- rows, err := q.db.Query(ctx, recursiveSysMenus)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*RecursiveSysMenusRow{}
- for rows.Next() {
- var i RecursiveSysMenusRow
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.Url,
- &i.Type,
- &i.ParentID,
- &i.ParentPath,
- &i.Avatar,
- &i.Style,
- &i.Visible,
- &i.IsList,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const recursiveSysMenusByRoleID = `-- name: RecursiveSysMenusByRoleID :many
-WITH RECURSIVE dist AS (SELECT sys_menu.id, sys_menu.name, sys_menu.display_name, sys_menu.url, sys_menu.type, sys_menu.parent_id, sys_menu.parent_path, sys_menu.avatar, sys_menu.style, sys_menu.visible, sys_menu.is_list, sys_menu.status, sys_menu.sort, sys_menu.created_at, sys_menu.updated_at
- FROM sys_menu
- WHERE status = 0
- AND is_list = true
- AND id IN (SELECT menu_id
- FROM sys_role_menu
- WHERE role_id = $1)
- UNION ALL
- SELECT sys_menu.id, sys_menu.name, sys_menu.display_name, sys_menu.url, sys_menu.type, sys_menu.parent_id, sys_menu.parent_path, sys_menu.avatar, sys_menu.style, sys_menu.visible, sys_menu.is_list, sys_menu.status, sys_menu.sort, sys_menu.created_at, sys_menu.updated_at
- FROM sys_menu,
- dist
- WHERE sys_menu.id = dist.parent_id)
-SELECT id, name, display_name, url, type, parent_id, parent_path, avatar, style, visible, is_list, status, sort, created_at, updated_at
-FROM dist
-ORDER BY dist.sort DESC, dist.id ASC
-`
-
-type RecursiveSysMenusByRoleIDRow struct {
- ID int32 `json:"id"`
- Name string `json:"name"`
- DisplayName string `json:"display_name"`
- Url string `json:"url"`
- Type string `json:"type"`
- ParentID int32 `json:"parent_id"`
- ParentPath string `json:"parent_path"`
- Avatar string `json:"avatar"`
- Style string `json:"style"`
- Visible bool `json:"visible"`
- IsList bool `json:"is_list"`
- Status int32 `json:"status"`
- Sort int32 `json:"sort"`
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-func (q *Queries) RecursiveSysMenusByRoleID(ctx context.Context, roleID int32) ([]*RecursiveSysMenusByRoleIDRow, error) {
- rows, err := q.db.Query(ctx, recursiveSysMenusByRoleID, roleID)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*RecursiveSysMenusByRoleIDRow{}
- for rows.Next() {
- var i RecursiveSysMenusByRoleIDRow
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.Url,
- &i.Type,
- &i.ParentID,
- &i.ParentPath,
- &i.Avatar,
- &i.Style,
- &i.Visible,
- &i.IsList,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const updateSysMenu = `-- name: UpdateSysMenu :one
-UPDATE sys_menu
-SET name = $2,
- display_name = $3,
- url = $4,
- type = $5,
- parent_id = $6,
- parent_path = $7,
- avatar = $8,
- style = $9,
- visible = $10,
- is_list = $11,
- status = $12,
- sort = $13,
- updated_at = $14
-WHERE id = $1
-RETURNING id, name, display_name, url, type, parent_id, parent_path, avatar, style, visible, is_list, status, sort, created_at, updated_at
-`
-
-type UpdateSysMenuParams struct {
- ID int32 `json:"id"`
- Name string `json:"name"`
- DisplayName string `json:"display_name"`
- Url string `json:"url"`
- Type string `json:"type"`
- ParentID int32 `json:"parent_id"`
- ParentPath string `json:"parent_path"`
- Avatar string `json:"avatar"`
- Style string `json:"style"`
- Visible bool `json:"visible"`
- IsList bool `json:"is_list"`
- Status int32 `json:"status"`
- Sort int32 `json:"sort"`
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-func (q *Queries) UpdateSysMenu(ctx context.Context, arg *UpdateSysMenuParams) (*SysMenu, error) {
- row := q.db.QueryRow(ctx, updateSysMenu,
- arg.ID,
- arg.Name,
- arg.DisplayName,
- arg.Url,
- arg.Type,
- arg.ParentID,
- arg.ParentPath,
- arg.Avatar,
- arg.Style,
- arg.Visible,
- arg.IsList,
- arg.Status,
- arg.Sort,
- arg.UpdatedAt,
- )
- var i SysMenu
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.Url,
- &i.Type,
- &i.ParentID,
- &i.ParentPath,
- &i.Avatar,
- &i.Style,
- &i.Visible,
- &i.IsList,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
diff --git a/internal/db/sqlc/sys_role.sql.go b/internal/db/sqlc/sys_role.sql.go
deleted file mode 100644
index 5198a56..0000000
--- a/internal/db/sqlc/sys_role.sql.go
+++ /dev/null
@@ -1,384 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: sys_role.sql
-
-package db
-
-import (
- "context"
- "time"
-)
-
-const allSysRole = `-- name: AllSysRole :many
-SELECT id, name, display_name, parent_id, parent_path, vip, status, sort, created_at, updated_at FROM sys_role
-WHERE status = 0
-ORDER BY sort DESC
-`
-
-func (q *Queries) AllSysRole(ctx context.Context) ([]*SysRole, error) {
- rows, err := q.db.Query(ctx, allSysRole)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*SysRole{}
- for rows.Next() {
- var i SysRole
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.ParentID,
- &i.ParentPath,
- &i.Vip,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const countSysRole = `-- name: CountSysRole :one
-SELECT count(*) FROM sys_role
-WHERE status = 0
-`
-
-func (q *Queries) CountSysRole(ctx context.Context) (int64, error) {
- row := q.db.QueryRow(ctx, countSysRole)
- var count int64
- err := row.Scan(&count)
- return count, err
-}
-
-const countSysRoleCondition = `-- name: CountSysRoleCondition :one
-SELECT COUNT(*) FROM sys_role
-WHERE (NOT $1::Boolean OR status = $2)
- AND (NOT $3::Boolean OR id = $4)
- AND (NOT $5::Boolean OR parent_id = $6)
- AND ($7::text = '' OR display_name ILIKE '%' || $7 || '%')
-`
-
-type CountSysRoleConditionParams struct {
- IsStatus bool `json:"is_status"`
- Status int32 `json:"status"`
- IsID bool `json:"is_id"`
- ID int32 `json:"id"`
- IsParentID bool `json:"is_parent_id"`
- ParentID int32 `json:"parent_id"`
- DisplayName string `json:"display_name"`
-}
-
-func (q *Queries) CountSysRoleCondition(ctx context.Context, arg *CountSysRoleConditionParams) (int64, error) {
- row := q.db.QueryRow(ctx, countSysRoleCondition,
- arg.IsStatus,
- arg.Status,
- arg.IsID,
- arg.ID,
- arg.IsParentID,
- arg.ParentID,
- arg.DisplayName,
- )
- var count int64
- err := row.Scan(&count)
- return count, err
-}
-
-const createSysRole = `-- name: CreateSysRole :one
-INSERT INTO sys_role (
- name,
- display_name,
- vip,
- parent_id,
- parent_path,
- status,
- sort,
- created_at,
- updated_at
-) VALUES (
- $1, $2, $3, $4, $5, $6, $7, $8, $9
-) RETURNING id, name, display_name, parent_id, parent_path, vip, status, sort, created_at, updated_at
-`
-
-type CreateSysRoleParams struct {
- Name string `json:"name"`
- DisplayName string `json:"display_name"`
- Vip bool `json:"vip"`
- ParentID int32 `json:"parent_id"`
- ParentPath string `json:"parent_path"`
- Status int32 `json:"status"`
- Sort int32 `json:"sort"`
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-func (q *Queries) CreateSysRole(ctx context.Context, arg *CreateSysRoleParams) (*SysRole, error) {
- row := q.db.QueryRow(ctx, createSysRole,
- arg.Name,
- arg.DisplayName,
- arg.Vip,
- arg.ParentID,
- arg.ParentPath,
- arg.Status,
- arg.Sort,
- arg.CreatedAt,
- arg.UpdatedAt,
- )
- var i SysRole
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.ParentID,
- &i.ParentPath,
- &i.Vip,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const existsVipRole = `-- name: ExistsVipRole :one
-SELECT EXISTS (
- SELECT 1 FROM sys_role
- WHERE vip = true
-)
-`
-
-func (q *Queries) ExistsVipRole(ctx context.Context) (bool, error) {
- row := q.db.QueryRow(ctx, existsVipRole)
- var exists bool
- err := row.Scan(&exists)
- return exists, err
-}
-
-const getFirstVipRole = `-- name: GetFirstVipRole :one
-SELECT id, name, display_name, parent_id, parent_path, vip, status, sort, created_at, updated_at FROM sys_role
-WHERE vip = true
-ORDER BY id ASC
-LIMIT 1
-`
-
-func (q *Queries) GetFirstVipRole(ctx context.Context) (*SysRole, error) {
- row := q.db.QueryRow(ctx, getFirstVipRole)
- var i SysRole
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.ParentID,
- &i.ParentPath,
- &i.Vip,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const getSysRole = `-- name: GetSysRole :one
-SELECT id, name, display_name, parent_id, parent_path, vip, status, sort, created_at, updated_at FROM sys_role
-WHERE id = $1 LIMIT 1
-`
-
-func (q *Queries) GetSysRole(ctx context.Context, id int32) (*SysRole, error) {
- row := q.db.QueryRow(ctx, getSysRole, id)
- var i SysRole
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.ParentID,
- &i.ParentPath,
- &i.Vip,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const getSysRoleByUserID = `-- name: GetSysRoleByUserID :one
-SELECT id, name, display_name, parent_id, parent_path, vip, status, sort, created_at, updated_at FROM sys_role
-WHERE id = (SELECT role_id
- FROM sys_user
- WHERE sys_user.id = $1)
-`
-
-func (q *Queries) GetSysRoleByUserID(ctx context.Context, id int32) (*SysRole, error) {
- row := q.db.QueryRow(ctx, getSysRoleByUserID, id)
- var i SysRole
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.ParentID,
- &i.ParentPath,
- &i.Vip,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const listSysRole = `-- name: ListSysRole :many
-SELECT id, name, display_name, parent_id, parent_path, vip, status, sort, created_at, updated_at FROM sys_role
-WHERE status = 0
-`
-
-func (q *Queries) ListSysRole(ctx context.Context) ([]*SysRole, error) {
- rows, err := q.db.Query(ctx, listSysRole)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*SysRole{}
- for rows.Next() {
- var i SysRole
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.ParentID,
- &i.ParentPath,
- &i.Vip,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const listSysRoleCondition = `-- name: ListSysRoleCondition :many
-SELECT id, name, display_name, parent_id, parent_path, vip, status, sort, created_at, updated_at FROM sys_role
-WHERE (NOT $1::Boolean OR status = $2)
- AND (NOT $3::Boolean OR id = $4)
- AND (NOT $5::Boolean OR parent_id = $6)
- AND ($7::text = '' OR display_name ILIKE '%' || $7 || '%')
-ORDER BY created_at DESC
-OFFSET $8
-LIMIT $9
-`
-
-type ListSysRoleConditionParams struct {
- IsStatus bool `json:"is_status"`
- Status int32 `json:"status"`
- IsID bool `json:"is_id"`
- ID int32 `json:"id"`
- IsParentID bool `json:"is_parent_id"`
- ParentID int32 `json:"parent_id"`
- DisplayName string `json:"display_name"`
- Skip int32 `json:"skip"`
- Size int32 `json:"size"`
-}
-
-func (q *Queries) ListSysRoleCondition(ctx context.Context, arg *ListSysRoleConditionParams) ([]*SysRole, error) {
- rows, err := q.db.Query(ctx, listSysRoleCondition,
- arg.IsStatus,
- arg.Status,
- arg.IsID,
- arg.ID,
- arg.IsParentID,
- arg.ParentID,
- arg.DisplayName,
- arg.Skip,
- arg.Size,
- )
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*SysRole{}
- for rows.Next() {
- var i SysRole
- if err := rows.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.ParentID,
- &i.ParentPath,
- &i.Vip,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const updateSysRole = `-- name: UpdateSysRole :one
-UPDATE sys_role
-SET display_name = $2,
- status = $3,
- parent_id = $4,
- parent_path = $5,
- sort = $6,
- updated_at = $7
-WHERE id = $1
-RETURNING id, name, display_name, parent_id, parent_path, vip, status, sort, created_at, updated_at
-`
-
-type UpdateSysRoleParams struct {
- ID int32 `json:"id"`
- DisplayName string `json:"display_name"`
- Status int32 `json:"status"`
- ParentID int32 `json:"parent_id"`
- ParentPath string `json:"parent_path"`
- Sort int32 `json:"sort"`
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-func (q *Queries) UpdateSysRole(ctx context.Context, arg *UpdateSysRoleParams) (*SysRole, error) {
- row := q.db.QueryRow(ctx, updateSysRole,
- arg.ID,
- arg.DisplayName,
- arg.Status,
- arg.ParentID,
- arg.ParentPath,
- arg.Sort,
- arg.UpdatedAt,
- )
- var i SysRole
- err := row.Scan(
- &i.ID,
- &i.Name,
- &i.DisplayName,
- &i.ParentID,
- &i.ParentPath,
- &i.Vip,
- &i.Status,
- &i.Sort,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
diff --git a/internal/db/sqlc/sys_role_menu.sql.go b/internal/db/sqlc/sys_role_menu.sql.go
deleted file mode 100644
index b46b6ee..0000000
--- a/internal/db/sqlc/sys_role_menu.sql.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: sys_role_menu.sql
-
-package db
-
-import (
- "context"
-)
-
-const createRoleMenu = `-- name: CreateRoleMenu :exec
-INSERT INTO sys_role_menu (
- role_id,
- menu_id
-) VALUES (
- $1, $2
-)
-`
-
-type CreateRoleMenuParams struct {
- RoleID int32 `json:"role_id"`
- MenuID int32 `json:"menu_id"`
-}
-
-func (q *Queries) CreateRoleMenu(ctx context.Context, arg *CreateRoleMenuParams) error {
- _, err := q.db.Exec(ctx, createRoleMenu, arg.RoleID, arg.MenuID)
- return err
-}
-
-const deleteRoleMneuByRoleID = `-- name: DeleteRoleMneuByRoleID :exec
-DELETE FROM sys_role_menu
-WHERE role_id = $1
-`
-
-func (q *Queries) DeleteRoleMneuByRoleID(ctx context.Context, roleID int32) error {
- _, err := q.db.Exec(ctx, deleteRoleMneuByRoleID, roleID)
- return err
-}
diff --git a/internal/db/sqlc/sys_user.sql.go b/internal/db/sqlc/sys_user.sql.go
deleted file mode 100644
index a4826c9..0000000
--- a/internal/db/sqlc/sys_user.sql.go
+++ /dev/null
@@ -1,436 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: sys_user.sql
-
-package db
-
-import (
- "context"
- "time"
-
- "github.com/google/uuid"
-)
-
-const countSysUser = `-- name: CountSysUser :one
-SELECT COUNT(*) FROM sys_user
-WHERE status = 0
-`
-
-func (q *Queries) CountSysUser(ctx context.Context) (int64, error) {
- row := q.db.QueryRow(ctx, countSysUser)
- var count int64
- err := row.Scan(&count)
- return count, err
-}
-
-const countSysUserCondition = `-- name: CountSysUserCondition :one
-SELECT COUNT(*) FROM sys_user
-WHERE (NOT $1::Boolean OR status = $2)
- AND (NOT $3::Boolean OR id = $4)
- AND ($5::text = '' OR username ILIKE '%' || $5 || '%')
- AND ($6::text = '' OR email ILIKE '%' || $6 || '%')
-`
-
-type CountSysUserConditionParams struct {
- IsStatus bool `json:"is_status"`
- Status int32 `json:"status"`
- IsID bool `json:"is_id"`
- ID int32 `json:"id"`
- Username string `json:"username"`
- Email string `json:"email"`
-}
-
-func (q *Queries) CountSysUserCondition(ctx context.Context, arg *CountSysUserConditionParams) (int64, error) {
- row := q.db.QueryRow(ctx, countSysUserCondition,
- arg.IsStatus,
- arg.Status,
- arg.IsID,
- arg.ID,
- arg.Username,
- arg.Email,
- )
- var count int64
- err := row.Scan(&count)
- return count, err
-}
-
-const createSysUser = `-- name: CreateSysUser :one
-INSERT INTO sys_user (
- uuid,
- email,
- username,
- hashed_password,
- salt,
- avatar,
- gender,
- department_id,
- role_id,
- status,
- change_password_at,
- created_at,
- updated_at
-) VALUES (
- $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13
-) RETURNING id, uuid, email, username, hashed_password, salt, avatar, gender, department_id, role_id, status, change_password_at, created_at, updated_at
-`
-
-type CreateSysUserParams struct {
- Uuid uuid.UUID `json:"uuid"`
- Email string `json:"email"`
- Username string `json:"username"`
- HashedPassword []byte `json:"hashed_password"`
- Salt string `json:"salt"`
- Avatar string `json:"avatar"`
- Gender int32 `json:"gender"`
- DepartmentID int32 `json:"department_id"`
- RoleID int32 `json:"role_id"`
- Status int32 `json:"status"`
- ChangePasswordAt time.Time `json:"change_password_at"`
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-func (q *Queries) CreateSysUser(ctx context.Context, arg *CreateSysUserParams) (*SysUser, error) {
- row := q.db.QueryRow(ctx, createSysUser,
- arg.Uuid,
- arg.Email,
- arg.Username,
- arg.HashedPassword,
- arg.Salt,
- arg.Avatar,
- arg.Gender,
- arg.DepartmentID,
- arg.RoleID,
- arg.Status,
- arg.ChangePasswordAt,
- arg.CreatedAt,
- arg.UpdatedAt,
- )
- var i SysUser
- err := row.Scan(
- &i.ID,
- &i.Uuid,
- &i.Email,
- &i.Username,
- &i.HashedPassword,
- &i.Salt,
- &i.Avatar,
- &i.Gender,
- &i.DepartmentID,
- &i.RoleID,
- &i.Status,
- &i.ChangePasswordAt,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const existsSysUser = `-- name: ExistsSysUser :one
-SELECT EXISTS (
- SELECT 1 FROM sys_user
-)
-`
-
-func (q *Queries) ExistsSysUser(ctx context.Context) (bool, error) {
- row := q.db.QueryRow(ctx, existsSysUser)
- var exists bool
- err := row.Scan(&exists)
- return exists, err
-}
-
-const getSysUser = `-- name: GetSysUser :one
-SELECT id, uuid, email, username, hashed_password, salt, avatar, gender, department_id, role_id, status, change_password_at, created_at, updated_at FROM sys_user
-WHERE id = $1 LIMIT 1
-`
-
-func (q *Queries) GetSysUser(ctx context.Context, id int32) (*SysUser, error) {
- row := q.db.QueryRow(ctx, getSysUser, id)
- var i SysUser
- err := row.Scan(
- &i.ID,
- &i.Uuid,
- &i.Email,
- &i.Username,
- &i.HashedPassword,
- &i.Salt,
- &i.Avatar,
- &i.Gender,
- &i.DepartmentID,
- &i.RoleID,
- &i.Status,
- &i.ChangePasswordAt,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const getSysUserByEmail = `-- name: GetSysUserByEmail :one
-SELECT id, uuid, email, username, hashed_password, salt, avatar, gender, department_id, role_id, status, change_password_at, created_at, updated_at FROM sys_user
-WHERE email = $1 LIMIT 1
-`
-
-func (q *Queries) GetSysUserByEmail(ctx context.Context, email string) (*SysUser, error) {
- row := q.db.QueryRow(ctx, getSysUserByEmail, email)
- var i SysUser
- err := row.Scan(
- &i.ID,
- &i.Uuid,
- &i.Email,
- &i.Username,
- &i.HashedPassword,
- &i.Salt,
- &i.Avatar,
- &i.Gender,
- &i.DepartmentID,
- &i.RoleID,
- &i.Status,
- &i.ChangePasswordAt,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
-
-const listSysUser = `-- name: ListSysUser :many
-SELECT id, uuid, email, username, hashed_password, salt, avatar, gender, department_id, role_id, status, change_password_at, created_at, updated_at FROM sys_user
-WHERE status = 0
-ORDER BY created_at DESC
-`
-
-func (q *Queries) ListSysUser(ctx context.Context) ([]*SysUser, error) {
- rows, err := q.db.Query(ctx, listSysUser)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*SysUser{}
- for rows.Next() {
- var i SysUser
- if err := rows.Scan(
- &i.ID,
- &i.Uuid,
- &i.Email,
- &i.Username,
- &i.HashedPassword,
- &i.Salt,
- &i.Avatar,
- &i.Gender,
- &i.DepartmentID,
- &i.RoleID,
- &i.Status,
- &i.ChangePasswordAt,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const listSysUserByIds = `-- name: ListSysUserByIds :many
-SELECT id, uuid, email, username, hashed_password, salt, avatar, gender, department_id, role_id, status, change_password_at, created_at, updated_at FROM sys_user
-WHERE id = ANY($1::int[])
-`
-
-func (q *Queries) ListSysUserByIds(ctx context.Context, dollar_1 []int32) ([]*SysUser, error) {
- rows, err := q.db.Query(ctx, listSysUserByIds, dollar_1)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*SysUser{}
- for rows.Next() {
- var i SysUser
- if err := rows.Scan(
- &i.ID,
- &i.Uuid,
- &i.Email,
- &i.Username,
- &i.HashedPassword,
- &i.Salt,
- &i.Avatar,
- &i.Gender,
- &i.DepartmentID,
- &i.RoleID,
- &i.Status,
- &i.ChangePasswordAt,
- &i.CreatedAt,
- &i.UpdatedAt,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const listSysUserCondition = `-- name: ListSysUserCondition :many
-SELECT id,
- uuid,
- email,
- username,
- avatar,
- gender,
- department_id,
- role_id,
- status,
- change_password_at,
- created_at,
- updated_at,
- COALESCE((SELECT name FROM sys_department WHERE ID = sys_user.department_id), '') AS department_name,
- COALESCE((SELECT display_name
- FROM sys_role
- WHERE id = sys_user.role_id), '') AS role_name
-FROM sys_user
-WHERE (NOT $1::Boolean OR sys_user.status = $2)
- AND (NOT $3::Boolean OR sys_user.id = $4)
- AND ($5::text = '' OR sys_user.username ILIKE '%' || $5 || '%')
- AND ($6::text = '' OR sys_user.email ILIKE '%' || $6 || '%')
-ORDER BY created_at DESC
-OFFSET $7
-LIMIT $8
-`
-
-type ListSysUserConditionParams struct {
- IsStatus bool `json:"is_status"`
- Status int32 `json:"status"`
- IsID bool `json:"is_id"`
- ID int32 `json:"id"`
- Username string `json:"username"`
- Email string `json:"email"`
- Skip int32 `json:"skip"`
- Size int32 `json:"size"`
-}
-
-type ListSysUserConditionRow struct {
- ID int32 `json:"id"`
- Uuid uuid.UUID `json:"uuid"`
- Email string `json:"email"`
- Username string `json:"username"`
- Avatar string `json:"avatar"`
- Gender int32 `json:"gender"`
- DepartmentID int32 `json:"department_id"`
- RoleID int32 `json:"role_id"`
- Status int32 `json:"status"`
- ChangePasswordAt time.Time `json:"change_password_at"`
- CreatedAt time.Time `json:"created_at"`
- UpdatedAt time.Time `json:"updated_at"`
- DepartmentName interface{} `json:"department_name"`
- RoleName interface{} `json:"role_name"`
-}
-
-func (q *Queries) ListSysUserCondition(ctx context.Context, arg *ListSysUserConditionParams) ([]*ListSysUserConditionRow, error) {
- rows, err := q.db.Query(ctx, listSysUserCondition,
- arg.IsStatus,
- arg.Status,
- arg.IsID,
- arg.ID,
- arg.Username,
- arg.Email,
- arg.Skip,
- arg.Size,
- )
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*ListSysUserConditionRow{}
- for rows.Next() {
- var i ListSysUserConditionRow
- if err := rows.Scan(
- &i.ID,
- &i.Uuid,
- &i.Email,
- &i.Username,
- &i.Avatar,
- &i.Gender,
- &i.DepartmentID,
- &i.RoleID,
- &i.Status,
- &i.ChangePasswordAt,
- &i.CreatedAt,
- &i.UpdatedAt,
- &i.DepartmentName,
- &i.RoleName,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
-
-const updateSysUser = `-- name: UpdateSysUser :one
-UPDATE sys_user
-SET username = $2,
- hashed_password = $3,
- avatar = $4,
- gender = $5,
- department_id = $6,
- role_id = $7,
- status = $8,
- change_password_at = $9,
- updated_at = $10
-WHERE id = $1
-RETURNING id, uuid, email, username, hashed_password, salt, avatar, gender, department_id, role_id, status, change_password_at, created_at, updated_at
-`
-
-type UpdateSysUserParams struct {
- ID int32 `json:"id"`
- Username string `json:"username"`
- HashedPassword []byte `json:"hashed_password"`
- Avatar string `json:"avatar"`
- Gender int32 `json:"gender"`
- DepartmentID int32 `json:"department_id"`
- RoleID int32 `json:"role_id"`
- Status int32 `json:"status"`
- ChangePasswordAt time.Time `json:"change_password_at"`
- UpdatedAt time.Time `json:"updated_at"`
-}
-
-func (q *Queries) UpdateSysUser(ctx context.Context, arg *UpdateSysUserParams) (*SysUser, error) {
- row := q.db.QueryRow(ctx, updateSysUser,
- arg.ID,
- arg.Username,
- arg.HashedPassword,
- arg.Avatar,
- arg.Gender,
- arg.DepartmentID,
- arg.RoleID,
- arg.Status,
- arg.ChangePasswordAt,
- arg.UpdatedAt,
- )
- var i SysUser
- err := row.Scan(
- &i.ID,
- &i.Uuid,
- &i.Email,
- &i.Username,
- &i.HashedPassword,
- &i.Salt,
- &i.Avatar,
- &i.Gender,
- &i.DepartmentID,
- &i.RoleID,
- &i.Status,
- &i.ChangePasswordAt,
- &i.CreatedAt,
- &i.UpdatedAt,
- )
- return &i, err
-}
diff --git a/internal/db/sqlc/sys_user_login_log.sql.go b/internal/db/sqlc/sys_user_login_log.sql.go
deleted file mode 100644
index 9cd8cc6..0000000
--- a/internal/db/sqlc/sys_user_login_log.sql.go
+++ /dev/null
@@ -1,172 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-// sqlc v1.28.0
-// source: sys_user_login_log.sql
-
-package db
-
-import (
- "context"
- "time"
-
- "github.com/google/uuid"
-)
-
-const countSysUserLoginLogCondition = `-- name: CountSysUserLoginLogCondition :one
-SELECT COUNT(*) FROM sys_user_login_log
-WHERE created_at BETWEEN $1 AND $2
- AND ($3::text = '' OR email ILIKE '%' || $3 || '%')
- AND ($4::text = '' OR username ILIKE '%' || $4 || '%')
-`
-
-type CountSysUserLoginLogConditionParams struct {
- StartAt time.Time `json:"start_at"`
- EndAt time.Time `json:"end_at"`
- Email string `json:"email"`
- Username string `json:"username"`
-}
-
-func (q *Queries) CountSysUserLoginLogCondition(ctx context.Context, arg *CountSysUserLoginLogConditionParams) (int64, error) {
- row := q.db.QueryRow(ctx, countSysUserLoginLogCondition,
- arg.StartAt,
- arg.EndAt,
- arg.Email,
- arg.Username,
- )
- var count int64
- err := row.Scan(&count)
- return count, err
-}
-
-const createSysUserLoginLog = `-- name: CreateSysUserLoginLog :exec
-INSERT INTO sys_user_login_log (created_at,
- email,
- username,
- user_uuid,
- is_success,
- message,
- referer_url,
- url,
- os,
- ip,
- browser)
-VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)
-`
-
-type CreateSysUserLoginLogParams struct {
- CreatedAt time.Time `json:"created_at"`
- Email string `json:"email"`
- Username string `json:"username"`
- UserUuid uuid.UUID `json:"user_uuid"`
- IsSuccess bool `json:"is_success"`
- Message string `json:"message"`
- RefererUrl string `json:"referer_url"`
- Url string `json:"url"`
- Os string `json:"os"`
- Ip string `json:"ip"`
- Browser string `json:"browser"`
-}
-
-func (q *Queries) CreateSysUserLoginLog(ctx context.Context, arg *CreateSysUserLoginLogParams) error {
- _, err := q.db.Exec(ctx, createSysUserLoginLog,
- arg.CreatedAt,
- arg.Email,
- arg.Username,
- arg.UserUuid,
- arg.IsSuccess,
- arg.Message,
- arg.RefererUrl,
- arg.Url,
- arg.Os,
- arg.Ip,
- arg.Browser,
- )
- return err
-}
-
-const listSysUserLoginLogCondition = `-- name: ListSysUserLoginLogCondition :many
-SELECT
- id,
- created_at,
- email,
- COALESCE((SELECT username FROM sys_user WHERE email = sys_user_login_log.email LIMIT 1), '') AS username,
- user_uuid,
- is_success,
- message,
- referer_url,
- url,
- os,
- ip,
- browser
-FROM sys_user_login_log
-WHERE sys_user_login_log.created_at BETWEEN $1 AND $2
- AND ($3::text = '' OR email ILIKE '%' || $3 || '%')
- AND ($4::text = '' OR username ILIKE '%' || $4 || '%')
-ORDER BY created_at DESC
-OFFSET $5
-LIMIT $6
-`
-
-type ListSysUserLoginLogConditionParams struct {
- StartAt time.Time `json:"start_at"`
- EndAt time.Time `json:"end_at"`
- Email string `json:"email"`
- Username string `json:"username"`
- Skip int32 `json:"skip"`
- Size int32 `json:"size"`
-}
-
-type ListSysUserLoginLogConditionRow struct {
- ID int64 `json:"id"`
- CreatedAt time.Time `json:"created_at"`
- Email string `json:"email"`
- Username interface{} `json:"username"`
- UserUuid uuid.UUID `json:"user_uuid"`
- IsSuccess bool `json:"is_success"`
- Message string `json:"message"`
- RefererUrl string `json:"referer_url"`
- Url string `json:"url"`
- Os string `json:"os"`
- Ip string `json:"ip"`
- Browser string `json:"browser"`
-}
-
-func (q *Queries) ListSysUserLoginLogCondition(ctx context.Context, arg *ListSysUserLoginLogConditionParams) ([]*ListSysUserLoginLogConditionRow, error) {
- rows, err := q.db.Query(ctx, listSysUserLoginLogCondition,
- arg.StartAt,
- arg.EndAt,
- arg.Email,
- arg.Username,
- arg.Skip,
- arg.Size,
- )
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- items := []*ListSysUserLoginLogConditionRow{}
- for rows.Next() {
- var i ListSysUserLoginLogConditionRow
- if err := rows.Scan(
- &i.ID,
- &i.CreatedAt,
- &i.Email,
- &i.Username,
- &i.UserUuid,
- &i.IsSuccess,
- &i.Message,
- &i.RefererUrl,
- &i.Url,
- &i.Os,
- &i.Ip,
- &i.Browser,
- ); err != nil {
- return nil, err
- }
- items = append(items, &i)
- }
- if err := rows.Err(); err != nil {
- return nil, err
- }
- return items, nil
-}
diff --git a/internal/db/sqlc/utl.go b/internal/db/sqlc/utl.go
deleted file mode 100644
index 7e8b875..0000000
--- a/internal/db/sqlc/utl.go
+++ /dev/null
@@ -1,44 +0,0 @@
-package db
-
-import (
- "bytes"
- "fmt"
- "strings"
- "sync"
- "text/template"
-)
-
-var queriesCache sync.Map
-
-func BuildQuery(text string, data map[string]any) (string, []any, error) {
- var t *template.Template
- v, ok := queriesCache.Load(text)
- if !ok {
- var err error
- t, err = template.New("query").Parse(text)
- if err != nil {
- return "", nil, fmt.Errorf("could not parse sql query template: %w", err)
- }
-
- queriesCache.Store(text, t)
- } else {
- t = v.(*template.Template)
- }
-
- var wr bytes.Buffer
- if err := t.Execute(&wr, data); err != nil {
- return "", nil, fmt.Errorf("could not apply sql query data: %w", err)
- }
-
- query := wr.String()
- args := []any{}
- for key, val := range data {
- if !strings.Contains(query, "@"+key) {
- continue
- }
-
- args = append(args, val)
- query = strings.ReplaceAll(query, "@"+key, fmt.Sprintf("$%d", len(args)))
- }
- return query, args, nil
-}
diff --git a/internal/erpserver/biz/biz.go b/internal/erpserver/biz/biz.go
deleted file mode 100644
index ba4cd02..0000000
--- a/internal/erpserver/biz/biz.go
+++ /dev/null
@@ -1,88 +0,0 @@
-package biz
-
-import (
- db "management/internal/db/sqlc"
- budgetv1 "management/internal/erpserver/biz/v1/budget"
- commonv1 "management/internal/erpserver/biz/v1/common"
- customerv1 "management/internal/erpserver/biz/v1/customer"
- expensev1 "management/internal/erpserver/biz/v1/expense"
- incomev1 "management/internal/erpserver/biz/v1/income"
- projectv1 "management/internal/erpserver/biz/v1/project"
- systemv1 "management/internal/erpserver/biz/v1/system"
- "management/internal/erpserver/store"
- "management/internal/pkg/redis"
- "management/internal/pkg/session"
-
- "github.com/drhin/logger"
-)
-
-// IBiz 定义了业务层需要实现的方法.
-type IBiz interface {
- // 获取公共业务接口.
- CommonV1() commonv1.CommonBiz
- // 获取系统业务接口.
- SystemV1() systemv1.SystemBiz
- // 项目管理
- ProjectV1() projectv1.ProjectBiz
- // 预算管理
- BudgetV1() budgetv1.BudgetBiz
- // 客户管理
- CustomerV1() customerv1.CustomerBiz
- // 收入管理
- IncomeV1() incomev1.IncomeBiz
- // 支出管理
- ExpenseV1() expensev1.ExpenseBiz
-}
-
-// biz 是 IBiz 的一个具体实现.
-type biz struct {
- database store.IStore
- store db.Store
- redis redis.RedisCache
- session session.Session
- logger *logger.Logger
-}
-
-// 确保 biz 实现了 IBiz 接口.
-var _ IBiz = (*biz)(nil)
-
-// NewBiz 创建一个 IBiz 类型的实例.
-func NewBiz(database store.IStore, store db.Store, redis redis.RedisCache, session session.Session, logger *logger.Logger) *biz {
- return &biz{
- database: database,
- store: store,
- redis: redis,
- session: session,
- logger: logger,
- }
-}
-
-// CommonV1 返回一个实现了 CommonBiz 接口的实例.
-func (b *biz) CommonV1() commonv1.CommonBiz {
- return commonv1.New()
-}
-
-// SystemV1 返回一个实现了 SystemBiz 接口的实例.
-func (b *biz) SystemV1() systemv1.SystemBiz {
- return systemv1.New(b.database, b.store, b.redis, b.session, b.logger)
-}
-
-func (b *biz) ProjectV1() projectv1.ProjectBiz {
- return projectv1.New(b.store, b.redis)
-}
-
-func (b *biz) BudgetV1() budgetv1.BudgetBiz {
- return budgetv1.New(b.store, b.redis)
-}
-
-func (b *biz) CustomerV1() customerv1.CustomerBiz {
- return customerv1.New(b.store, b.redis)
-}
-
-func (b *biz) IncomeV1() incomev1.IncomeBiz {
- return incomev1.New(b.store, b.redis)
-}
-
-func (b *biz) ExpenseV1() expensev1.ExpenseBiz {
- return expensev1.New(b.store, b.redis)
-}
diff --git a/internal/erpserver/biz/v1/budget/budget.go b/internal/erpserver/biz/v1/budget/budget.go
deleted file mode 100644
index 5d91dbe..0000000
--- a/internal/erpserver/biz/v1/budget/budget.go
+++ /dev/null
@@ -1,45 +0,0 @@
-package budget
-
-import (
- "context"
-
- db "management/internal/db/sqlc"
- "management/internal/pkg/redis"
-)
-
-type BudgetBiz interface {
- Create(ctx context.Context, arg *db.CreateBudgetParams) (*db.Budget, error)
- Update(ctx context.Context, arg *db.UpdateBudgetParams) (*db.Budget, error)
- List(ctx context.Context, arg *db.ListBudgetConditionParam) ([]*db.BudgetView, int64, error)
- Get(ctx context.Context, id int64) (*db.Budget, error)
-}
-
-type budgetBiz struct {
- store db.Store
- redis redis.RedisCache
-}
-
-var _ BudgetBiz = (*budgetBiz)(nil)
-
-func New(store db.Store, redis redis.RedisCache) *budgetBiz {
- return &budgetBiz{
- store: store,
- redis: redis,
- }
-}
-
-func (b *budgetBiz) Create(ctx context.Context, arg *db.CreateBudgetParams) (*db.Budget, error) {
- return b.store.CreateBudget(ctx, arg)
-}
-
-func (b *budgetBiz) Update(ctx context.Context, arg *db.UpdateBudgetParams) (*db.Budget, error) {
- return b.store.UpdateBudget(ctx, arg)
-}
-
-func (b *budgetBiz) List(ctx context.Context, arg *db.ListBudgetConditionParam) ([]*db.BudgetView, int64, error) {
- return b.store.ListBudgetCondition(ctx, arg)
-}
-
-func (b *budgetBiz) Get(ctx context.Context, id int64) (*db.Budget, error) {
- return b.store.GetBudget(ctx, id)
-}
diff --git a/internal/erpserver/biz/v1/common/captcha.go b/internal/erpserver/biz/v1/common/captcha.go
deleted file mode 100644
index 89079c1..0000000
--- a/internal/erpserver/biz/v1/common/captcha.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package common
-
-import (
- "github.com/mojocn/base64Captcha"
-)
-
-// CaptchaBiz 定义处理验证码请求所需的方法.
-type CaptchaBiz interface {
- Generate(height int, width int, length int, maxSkew float64, dotCount int) (id, b64s, answer string, err error)
- Verify(id, answer string, clear bool) bool
-}
-
-// captchaBiz 是 CaptchaBiz 接口的实现.
-type captchaBiz struct{}
-
-// 确保 captchaBiz 实现了 CaptchaBiz 接口.
-var _ CaptchaBiz = (*captchaBiz)(nil)
-
-func NewCaptcha() *captchaBiz {
- return &captchaBiz{}
-}
-
-var captchaStore base64Captcha.Store = base64Captcha.DefaultMemStore
-
-func (b *captchaBiz) Generate(height int, width int, length int, maxSkew float64, dotCount int) (id, b64s, answer string, err error) {
- driver := base64Captcha.NewDriverDigit(height, width, length, maxSkew, dotCount)
- // driver := base64Captcha.NewDriverString(config.File.Captcha.ImgHeight,
- // config.File.Captcha.ImgWidth,
- // 6, 1, keyLong, source, nil, nil, nil)
- cp := base64Captcha.NewCaptcha(driver, captchaStore)
- return cp.Generate()
-}
-
-func (b *captchaBiz) Verify(id, answer string, clear bool) bool {
- return captchaStore.Verify(id, answer, clear)
-}
diff --git a/internal/erpserver/biz/v1/common/common.go b/internal/erpserver/biz/v1/common/common.go
deleted file mode 100644
index 379283c..0000000
--- a/internal/erpserver/biz/v1/common/common.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package common
-
-type CommonBiz interface {
- CaptchaBiz() CaptchaBiz
-}
-
-type commonBiz struct{}
-
-var _ CommonBiz = (*commonBiz)(nil)
-
-func New() *commonBiz {
- return &commonBiz{}
-}
-
-func (b *commonBiz) CaptchaBiz() CaptchaBiz {
- return NewCaptcha()
-}
diff --git a/internal/erpserver/biz/v1/customer/customer.go b/internal/erpserver/biz/v1/customer/customer.go
deleted file mode 100644
index aead9eb..0000000
--- a/internal/erpserver/biz/v1/customer/customer.go
+++ /dev/null
@@ -1,45 +0,0 @@
-package customer
-
-import (
- "context"
-
- db "management/internal/db/sqlc"
- "management/internal/pkg/redis"
-)
-
-type CustomerBiz interface {
- Create(ctx context.Context, arg *db.CreateCustomerParams) (*db.Customer, error)
- Update(ctx context.Context, arg *db.UpdateCustomerParams) (*db.Customer, error)
- List(ctx context.Context, arg *db.ListCustomerConditionParam) ([]*db.CustomerView, int64, error)
- Get(ctx context.Context, id int64) (*db.Customer, error)
-}
-
-type customerBiz struct {
- store db.Store
- redis redis.RedisCache
-}
-
-var _ CustomerBiz = (*customerBiz)(nil)
-
-func New(store db.Store, redis redis.RedisCache) *customerBiz {
- return &customerBiz{
- store: store,
- redis: redis,
- }
-}
-
-func (b *customerBiz) Create(ctx context.Context, arg *db.CreateCustomerParams) (*db.Customer, error) {
- return b.store.CreateCustomer(ctx, arg)
-}
-
-func (b *customerBiz) Update(ctx context.Context, arg *db.UpdateCustomerParams) (*db.Customer, error) {
- return b.store.UpdateCustomer(ctx, arg)
-}
-
-func (b *customerBiz) List(ctx context.Context, arg *db.ListCustomerConditionParam) ([]*db.CustomerView, int64, error) {
- return b.store.ListCustomerCondition(ctx, arg)
-}
-
-func (b *customerBiz) Get(ctx context.Context, id int64) (*db.Customer, error) {
- return b.store.GetCustomer(ctx, id)
-}
diff --git a/internal/erpserver/biz/v1/expense/expsense.go b/internal/erpserver/biz/v1/expense/expsense.go
deleted file mode 100644
index 25a48b6..0000000
--- a/internal/erpserver/biz/v1/expense/expsense.go
+++ /dev/null
@@ -1,67 +0,0 @@
-package expense
-
-import (
- "context"
-
- db "management/internal/db/sqlc"
- "management/internal/pkg/redis"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type ExpenseBiz interface {
- Create(ctx context.Context, arg *db.CreateExpenseParams) (*db.Expense, error)
- Update(ctx context.Context, arg *db.UpdateExpenseParams) (*db.Expense, error)
- List(ctx context.Context, arg *db.ListExpenseConditionParam) ([]*db.ExpenseView, int64, error)
- Get(ctx context.Context, id int64) (*db.Expense, error)
- Sum(ctx context.Context) (pgtype.Numeric, error)
- SumByProjectID(ctx context.Context, id int64) (pgtype.Numeric, error)
- Statistics(ctx context.Context) ([]*db.StatisticsExpenseRow, error)
- StatisticsByProjectID(ctx context.Context, projectID int64) ([]*db.StatisticsExpenseByProjectIDRow, error)
-}
-
-type expenseBiz struct {
- store db.Store
- redis redis.RedisCache
-}
-
-var _ ExpenseBiz = (*expenseBiz)(nil)
-
-func New(store db.Store, redis redis.RedisCache) *expenseBiz {
- return &expenseBiz{
- store: store,
- redis: redis,
- }
-}
-
-func (b *expenseBiz) Create(ctx context.Context, arg *db.CreateExpenseParams) (*db.Expense, error) {
- return b.store.CreateExpense(ctx, arg)
-}
-
-func (b *expenseBiz) Update(ctx context.Context, arg *db.UpdateExpenseParams) (*db.Expense, error) {
- return b.store.UpdateExpense(ctx, arg)
-}
-
-func (b *expenseBiz) List(ctx context.Context, arg *db.ListExpenseConditionParam) ([]*db.ExpenseView, int64, error) {
- return b.store.ListExpenseCondition(ctx, arg)
-}
-
-func (b *expenseBiz) Get(ctx context.Context, id int64) (*db.Expense, error) {
- return b.store.GetExpense(ctx, id)
-}
-
-func (b *expenseBiz) Sum(ctx context.Context) (pgtype.Numeric, error) {
- return b.store.SumExpense(ctx)
-}
-
-func (b *expenseBiz) SumByProjectID(ctx context.Context, id int64) (pgtype.Numeric, error) {
- return b.store.SumExpenseByProjectID(ctx, id)
-}
-
-func (b *expenseBiz) Statistics(ctx context.Context) ([]*db.StatisticsExpenseRow, error) {
- return b.store.StatisticsExpense(ctx)
-}
-
-func (b *expenseBiz) StatisticsByProjectID(ctx context.Context, projectID int64) ([]*db.StatisticsExpenseByProjectIDRow, error) {
- return b.store.StatisticsExpenseByProjectID(ctx, projectID)
-}
diff --git a/internal/erpserver/biz/v1/income/income.go b/internal/erpserver/biz/v1/income/income.go
deleted file mode 100644
index 4288609..0000000
--- a/internal/erpserver/biz/v1/income/income.go
+++ /dev/null
@@ -1,67 +0,0 @@
-package income
-
-import (
- "context"
-
- db "management/internal/db/sqlc"
- "management/internal/pkg/redis"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type IncomeBiz interface {
- Create(ctx context.Context, arg *db.CreateIncomeParams) (*db.Income, error)
- Update(ctx context.Context, arg *db.UpdateIncomeParams) (*db.Income, error)
- List(ctx context.Context, arg *db.ListIncomeConditionParam) ([]*db.IncomeView, int64, error)
- Get(ctx context.Context, id int64) (*db.Income, error)
- Sum(ctx context.Context) (pgtype.Numeric, error)
- SumByProjectID(ctx context.Context, id int64) (pgtype.Numeric, error)
- Statistics(ctx context.Context) ([]*db.StatisticsIncomeRow, error)
- StatisticsByProjectID(ctx context.Context, projectID int64) ([]*db.StatisticsIncomeByProjectIDRow, error)
-}
-
-type incomeBiz struct {
- store db.Store
- redis redis.RedisCache
-}
-
-var _ IncomeBiz = (*incomeBiz)(nil)
-
-func New(store db.Store, redis redis.RedisCache) *incomeBiz {
- return &incomeBiz{
- store: store,
- redis: redis,
- }
-}
-
-func (b *incomeBiz) Create(ctx context.Context, arg *db.CreateIncomeParams) (*db.Income, error) {
- return b.store.CreateIncome(ctx, arg)
-}
-
-func (b *incomeBiz) Update(ctx context.Context, arg *db.UpdateIncomeParams) (*db.Income, error) {
- return b.store.UpdateIncome(ctx, arg)
-}
-
-func (b *incomeBiz) List(ctx context.Context, arg *db.ListIncomeConditionParam) ([]*db.IncomeView, int64, error) {
- return b.store.ListIncomeCondition(ctx, arg)
-}
-
-func (b *incomeBiz) Get(ctx context.Context, id int64) (*db.Income, error) {
- return b.store.GetIncome(ctx, id)
-}
-
-func (b *incomeBiz) Sum(ctx context.Context) (pgtype.Numeric, error) {
- return b.store.SumIncome(ctx)
-}
-
-func (b *incomeBiz) SumByProjectID(ctx context.Context, id int64) (pgtype.Numeric, error) {
- return b.store.SumIncomeByProjectID(ctx, id)
-}
-
-func (b *incomeBiz) Statistics(ctx context.Context) ([]*db.StatisticsIncomeRow, error) {
- return b.store.StatisticsIncome(ctx)
-}
-
-func (b *incomeBiz) StatisticsByProjectID(ctx context.Context, projectID int64) ([]*db.StatisticsIncomeByProjectIDRow, error) {
- return b.store.StatisticsIncomeByProjectID(ctx, projectID)
-}
diff --git a/internal/erpserver/biz/v1/project/project.go b/internal/erpserver/biz/v1/project/project.go
deleted file mode 100644
index a18f989..0000000
--- a/internal/erpserver/biz/v1/project/project.go
+++ /dev/null
@@ -1,148 +0,0 @@
-package project
-
-import (
- "context"
- "strconv"
-
- db "management/internal/db/sqlc"
- "management/internal/erpserver/model/view"
- "management/internal/pkg/redis"
- "management/internal/pkg/tpl/html"
-)
-
-type ProjectBiz interface {
- Create(ctx context.Context, p *db.CreateProjectParams, pf []*db.CreateProjectFileParams) error
- Update(ctx context.Context, p *db.UpdateProjectParams, pf []*db.CreateProjectFileParams) error
- List(ctx context.Context, q *db.ListProjectConditionParam) ([]*db.ProjectView, int64, error)
- Get(ctx context.Context, id int64) (*db.Project, error)
-
- XmSelect(ctx context.Context) ([]*view.XmSelect, error)
- ListHtml(ctx context.Context) ([]*html.SelectDict, error)
-
- ProjectExpansion
-}
-
-type ProjectExpansion interface {
- ListProjectFiles(ctx context.Context, projectID int64) ([]*db.ProjectFile, error)
-
- Statistics(ctx context.Context) ([]*db.StatisticsProjectsRow, error)
- StatisticsItem(ctx context.Context, id int64) (*db.StatisticsProjectItemRow, error)
-}
-
-type projectBiz struct {
- store db.Store
- redis redis.RedisCache
-}
-
-var _ ProjectBiz = (*projectBiz)(nil)
-
-func New(store db.Store, redis redis.RedisCache) *projectBiz {
- return &projectBiz{
- store: store,
- redis: redis,
- }
-}
-
-func (b *projectBiz) Create(ctx context.Context, p *db.CreateProjectParams, pf []*db.CreateProjectFileParams) error {
- return b.store.ExecTx(ctx, func(q *db.Queries) error {
- _, err := q.CreateProject(ctx, p)
- if err != nil {
- return err
- }
-
- for _, item := range pf {
- _, err = q.CreateProjectFile(ctx, item)
- if err != nil {
- return err
- }
- }
-
- return nil
- })
-}
-
-func (b *projectBiz) Update(ctx context.Context, p *db.UpdateProjectParams, pf []*db.CreateProjectFileParams) error {
- return b.store.ExecTx(ctx, func(q *db.Queries) error {
- _, err := q.UpdateProject(ctx, p)
- if err != nil {
- return err
- }
-
- err = q.DeleteProjectFile(ctx, p.ID)
- if err != nil {
- return err
- }
-
- for _, item := range pf {
- _, err = q.CreateProjectFile(ctx, item)
- if err != nil {
- return err
- }
- }
-
- return nil
- })
-}
-
-func (b *projectBiz) List(ctx context.Context, q *db.ListProjectConditionParam) ([]*db.ProjectView, int64, error) {
- res, total, err := b.store.ListProjectCondition(ctx, q)
- if err != nil {
- return nil, 0, err
- }
-
- return res, total, nil
-}
-
-func (b *projectBiz) Get(ctx context.Context, id int64) (*db.Project, error) {
- return b.store.GetProject(ctx, id)
-}
-
-func (b *projectBiz) ListProjectFiles(ctx context.Context, projectID int64) ([]*db.ProjectFile, error) {
- return b.store.ListProjectFiles(ctx, projectID)
-}
-
-func (b *projectBiz) XmSelect(ctx context.Context) ([]*view.XmSelect, error) {
- all, err := b.store.AllProjects(ctx)
- if err != nil || len(all) == 0 {
- return nil, err
- }
-
- var res []*view.XmSelect
- for _, item := range all {
- res = append(res, &view.XmSelect{
- Name: item.Name,
- Value: strconv.FormatInt(item.ID, 10),
- })
- }
- return res, nil
-}
-
-func (b *projectBiz) ListHtml(ctx context.Context) ([]*html.SelectDict, error) {
- all, err := b.store.AllProjects(ctx)
- if err != nil || len(all) == 0 {
- return nil, err
- }
-
- var res []*html.SelectDict
- res = append(res, &html.SelectDict{
- Name: "请选择",
- Value: "0",
- })
- for _, v := range all {
- item := html.SelectDict{
- Name: v.Name,
- Value: strconv.Itoa(int(v.ID)),
- }
- res = append(res, &item)
- }
-
- return res, nil
-}
-
-func (b *projectBiz) Statistics(ctx context.Context) ([]*db.StatisticsProjectsRow, error) {
- return b.store.StatisticsProjects(ctx)
-}
-
-func (b *projectBiz) StatisticsItem(ctx context.Context, id int64) (*db.StatisticsProjectItemRow, error) {
- return b.store.StatisticsProjectItem(ctx, id)
-}
diff --git a/internal/erpserver/biz/v1/system/audit.go b/internal/erpserver/biz/v1/system/audit.go
deleted file mode 100644
index b2f3c69..0000000
--- a/internal/erpserver/biz/v1/system/audit.go
+++ /dev/null
@@ -1,69 +0,0 @@
-package system
-
-import (
- "context"
- "time"
-
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
-)
-
-type AuditBiz interface {
- Create(ctx context.Context, arg *db.CreateSysAuditLogParams) error
- List(ctx context.Context, q dto.SearchDto) ([]*db.SysAuditLog, int64, error)
-}
-
-type auditBiz struct {
- store db.Store
-}
-
-var _ AuditBiz = (*auditBiz)(nil)
-
-func NewAudit(store db.Store) *auditBiz {
- return &auditBiz{
- store: store,
- }
-}
-
-func (b *auditBiz) Create(ctx context.Context, arg *db.CreateSysAuditLogParams) error {
- return b.store.CreateSysAuditLog(ctx, arg)
-}
-
-func (b *auditBiz) List(ctx context.Context, q dto.SearchDto) ([]*db.SysAuditLog, int64, error) {
- start, err := time.ParseInLocation(time.DateTime, q.SearchTimeBegin, time.Local)
- if err != nil {
- return nil, 0, err
- }
- end, err := time.ParseInLocation(time.DateTime, q.SearchTimeEnd, time.Local)
- if err != nil {
- return nil, 0, err
- }
-
- countArg := &db.CountSysAuditLogConditionParams{
- StartAt: start,
- EndAt: end,
- Email: q.SearchEmail,
- Username: q.SearchName,
- }
-
- dataArg := &db.ListSysAuditLogConditionParams{
- StartAt: start,
- EndAt: end,
- Email: q.SearchEmail,
- Username: q.SearchName,
- Skip: (int32(q.Page) - 1) * int32(q.Rows),
- Size: int32(q.Rows),
- }
-
- count, err := b.store.CountSysAuditLogCondition(ctx, countArg)
- if err != nil {
- return nil, 0, err
- }
-
- audits, err := b.store.ListSysAuditLogCondition(ctx, dataArg)
- if err != nil {
- return nil, 0, err
- }
-
- return audits, count, nil
-}
diff --git a/internal/erpserver/biz/v1/system/category.go b/internal/erpserver/biz/v1/system/category.go
deleted file mode 100644
index fbd0a8a..0000000
--- a/internal/erpserver/biz/v1/system/category.go
+++ /dev/null
@@ -1,356 +0,0 @@
-package system
-
-import (
- "context"
- "encoding/json"
- "errors"
- "fmt"
- "strconv"
- "strings"
- "time"
-
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
- "management/internal/erpserver/model/form"
- "management/internal/erpserver/model/view"
- "management/internal/pkg/convertor"
- "management/internal/pkg/know"
- "management/internal/pkg/redis"
- "management/internal/pkg/tpl/html"
-
- "github.com/google/uuid"
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type CategoryBiz interface {
- Create(ctx context.Context, req *form.Category) error
- Update(ctx context.Context, req *form.Category) error
- All(ctx context.Context) ([]*db.Category, error)
- List(ctx context.Context, q dto.SearchDto) ([]*db.Category, int64, error)
- Get(ctx context.Context, id int32) (*db.Category, error)
- Refresh(ctx context.Context) ([]*db.Category, error)
- RebuildParentPath(ctx context.Context) error
-
- Tree(ctx context.Context, id int32) ([]*view.LayuiTree, error)
- XmSelect(ctx context.Context, letter string) ([]*view.XmSelect, error)
- XmSelectTree(ctx context.Context, id int32) ([]*view.XmSelectTree, error)
-
- ListHtmlByLetter(ctx context.Context, letter string) ([]*html.SelectDict, error)
-}
-
-type categoryBiz struct {
- store db.Store
- redis redis.RedisCache
-}
-
-var _ CategoryBiz = (*categoryBiz)(nil)
-
-func NewCategory(store db.Store, redis redis.RedisCache) *categoryBiz {
- return &categoryBiz{
- store: store,
- redis: redis,
- }
-}
-
-func (b *categoryBiz) All(ctx context.Context) ([]*db.Category, error) {
- key := know.GetManageKey(ctx, know.AllCategories)
- bs, err := redis.GetBytes(ctx, key)
- if err == nil {
- var res []*db.Category
- if err := json.Unmarshal(bs, &res); err == nil {
- return res, nil
- }
- }
-
- return b.Refresh(ctx)
-}
-
-func (b *categoryBiz) List(ctx context.Context, q dto.SearchDto) ([]*db.Category, int64, error) {
- countArg := &db.CountCategoriesConditionParams{
- IsStatus: q.SearchStatus != 9999,
- Status: int16(q.SearchStatus),
- IsID: q.SearchID != 0,
- ID: int32(q.SearchID),
- IsParentID: q.SearchParentID != 0,
- ParentID: int32(q.SearchParentID),
- Name: q.SearchName,
- }
-
- dataArg := &db.ListCategoriesConditionParams{
- IsStatus: q.SearchStatus != 9999,
- Status: int16(q.SearchStatus),
- IsID: q.SearchID != 0,
- ID: int32(q.SearchID),
- IsParentID: q.SearchParentID != 0,
- ParentID: int32(q.SearchParentID),
- Name: q.SearchName,
- Skip: (int32(q.Page) - 1) * int32(q.Rows),
- Size: int32(q.Rows),
- }
- count, err := b.store.CountCategoriesCondition(ctx, countArg)
- if err != nil {
- return nil, 0, err
- }
-
- departs, err := b.store.ListCategoriesCondition(ctx, dataArg)
- if err != nil {
- return nil, 0, err
- }
-
- return departs, count, nil
-}
-
-func (b *categoryBiz) Get(ctx context.Context, id int32) (*db.Category, error) {
- return b.store.GetCategory(ctx, id)
-}
-
-func (b *categoryBiz) Create(ctx context.Context, req *form.Category) error {
- if len(req.Icon) > 0 && !strings.HasPrefix(req.Icon, "/") {
- req.Icon = "/" + req.Icon
- }
-
- if len(req.Letter) == 0 {
- req.Letter = uuid.New().String()
- }
-
- parent := &db.Category{
- ID: 0,
- ParentID: 0,
- ParentPath: ",0,",
- }
- if *req.ParentID > 0 {
- var err error
- parent, err = b.store.GetCategory(ctx, *req.ParentID)
- if err != nil {
- return errors.New("父级节点错误")
- }
- }
-
- var order int32 = 6666
- if *req.Sort > 0 {
- order = *req.Sort
- }
-
- arg := &db.CreateCategoryParams{
- Name: req.Name,
- Icon: req.Icon,
- Description: req.Description,
- Letter: req.Letter,
- ParentID: parent.ID,
- ParentPath: convertor.HandleParentPath(fmt.Sprintf("%s,%d,", parent.ParentPath, parent.ID)),
- Status: *req.Status,
- Sort: order,
- }
- _, err := b.store.CreateCategory(ctx, arg)
- if err != nil {
- if db.IsUniqueViolation(err) {
- return errors.New("类别已存在")
- }
- return err
- }
- return nil
-}
-
-func (b *categoryBiz) Update(ctx context.Context, req *form.Category) error {
- if len(req.Icon) > 0 && !strings.HasPrefix(req.Icon, "/") {
- req.Icon = "/" + req.Icon
- }
-
- if len(req.Letter) == 0 {
- req.Letter = uuid.New().String()
- }
-
- parent := &db.Category{
- ID: 0,
- ParentID: 0,
- ParentPath: ",0,",
- }
- if *req.ParentID > 0 {
- var err error
- parent, err = b.store.GetCategory(ctx, *req.ParentID)
- if err != nil {
- return errors.New("父级节点错误")
- }
- }
-
- var order int32 = 6666
- if *req.Sort > 0 {
- order = *req.Sort
- }
-
- arg := &db.UpdateCategoryParams{
- ID: *req.ID,
- Name: pgtype.Text{
- String: req.Name,
- Valid: true,
- },
- Icon: pgtype.Text{
- String: req.Icon,
- Valid: len(req.Icon) > 0,
- },
- Description: pgtype.Text{
- String: req.Description,
- Valid: len(req.Description) > 0,
- },
- Letter: pgtype.Text{
- String: req.Letter,
- Valid: len(req.Letter) > 0,
- },
- ParentID: pgtype.Int4{
- Int32: *req.ParentID,
- Valid: true,
- },
- ParentPath: pgtype.Text{
- String: convertor.HandleParentPath(fmt.Sprintf("%s,%d,", parent.ParentPath, parent.ID)),
- Valid: true,
- },
- Sort: pgtype.Int4{
- Int32: order,
- Valid: true,
- },
- Status: pgtype.Int2{
- Int16: *req.Status,
- Valid: true,
- },
- }
- _, err := b.store.UpdateCategory(ctx, arg)
- return err
-}
-
-func (b *categoryBiz) Refresh(ctx context.Context) ([]*db.Category, error) {
- all, err := b.store.AllCategories(ctx)
- if err != nil {
- return nil, err
- }
-
- bs, err := json.Marshal(all)
- if err != nil {
- return nil, err
- }
-
- redis.Del(ctx, know.GetManageKey(ctx, know.AllCategorySimple))
- key := know.GetManageKey(ctx, know.AllCategories)
- err = redis.Set(ctx, key, bs, time.Hour*6)
- return all, err
-}
-
-func (b *categoryBiz) RebuildParentPath(ctx context.Context) error {
- return b.store.CategoryRebuildPath(ctx)
-}
-
-func (b *categoryBiz) Tree(ctx context.Context, id int32) ([]*view.LayuiTree, error) {
- all, err := b.All(ctx)
- if err != nil {
- return nil, err
- }
-
- return b.toTree(id, all), nil
-}
-
-func (b *categoryBiz) XmSelect(ctx context.Context, letter string) ([]*view.XmSelect, error) {
- all, err := b.All(ctx)
- if err != nil || len(all) == 0 {
- return nil, err
- }
-
- var current *db.Category
- for _, v := range all {
- if v.Letter == letter {
- current = v
- break
- }
- }
- if current == nil {
- return nil, errors.New("未找到当前类别")
- }
-
- var res []*view.XmSelect
- for _, v := range all {
- if v.ParentID == current.ID {
- item := view.XmSelect{
- Name: v.Name,
- Value: strconv.FormatInt(int64(v.ID), 10),
- }
- res = append(res, &item)
- }
- }
- return res, nil
-}
-
-func (b *categoryBiz) XmSelectTree(ctx context.Context, id int32) ([]*view.XmSelectTree, error) {
- all, err := b.All(ctx)
- if err != nil {
- return nil, err
- }
-
- return b.toXmSelectTree(id, all), nil
-}
-
-func (b *categoryBiz) ListHtmlByLetter(ctx context.Context, letter string) ([]*html.SelectDict, error) {
- all, err := b.All(ctx)
- if err != nil || len(all) == 0 {
- return nil, err
- }
-
- var current *db.Category
- for _, v := range all {
- if v.Letter == letter {
- current = v
- break
- }
- }
- if current == nil {
- return nil, errors.New("未找到当前类别")
- }
-
- var res []*html.SelectDict
- res = append(res, &html.SelectDict{
- Name: "请选择",
- Value: "0",
- })
- for _, v := range all {
- if v.ParentID == current.ID {
- item := html.SelectDict{
- Name: v.Name,
- Value: strconv.Itoa(int(v.ID)),
- }
- res = append(res, &item)
- }
- }
-
- return res, nil
-}
-
-func (b *categoryBiz) toTree(parentId int32, data []*db.Category) []*view.LayuiTree {
- var res []*view.LayuiTree
- for _, v := range data {
- if v.ParentID == parentId {
- item := view.LayuiTree{}
- item.ID = strconv.FormatInt(int64(v.ID), 10)
- item.Title = v.Name
- item.Children = b.toTree(v.ID, data)
- if v.ParentID == 0 {
- item.Spread = true
- }
- res = append(res, &item)
- }
- }
-
- return res
-}
-
-func (b *categoryBiz) toXmSelectTree(parentId int32, data []*db.Category) []*view.XmSelectTree {
- var res []*view.XmSelectTree
- for _, v := range data {
- if v.ParentID == parentId {
- item := view.XmSelectTree{
- Name: v.Name,
- Value: strconv.FormatInt(int64(v.ID), 10),
- Children: b.toXmSelectTree(v.ID, data),
- }
- res = append(res, &item)
- }
- }
-
- return res
-}
diff --git a/internal/erpserver/biz/v1/system/config.go b/internal/erpserver/biz/v1/system/config.go
deleted file mode 100644
index e15b224..0000000
--- a/internal/erpserver/biz/v1/system/config.go
+++ /dev/null
@@ -1,95 +0,0 @@
-package system
-
-import (
- "context"
- "encoding/json"
- "time"
-
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
- "management/internal/pkg/know"
- "management/internal/pkg/know/pearadmin"
- "management/internal/pkg/redis"
-)
-
-type ConfigBiz interface {
- Create(ctx context.Context, arg *db.CreateSysConfigParams) error
- Update(ctx context.Context, arg *db.UpdateSysConfigByKeyParams) error
- Get(ctx context.Context, id int32) (*db.SysConfig, error)
- List(ctx context.Context, q dto.SearchDto) ([]*db.SysConfig, int64, error)
-
- ConfigExpansion
-}
-
-type ConfigExpansion interface {
- Pear(ctx context.Context) (*dto.PearConfig, error)
-}
-
-type configBiz struct {
- store db.Store
- redis redis.RedisCache
-}
-
-var _ ConfigBiz = (*configBiz)(nil)
-
-func NewConfig(store db.Store, redis redis.RedisCache) *configBiz {
- return &configBiz{
- store: store,
- redis: redis,
- }
-}
-
-func (b *configBiz) Create(ctx context.Context, arg *db.CreateSysConfigParams) error {
- return b.store.CreateSysConfig(ctx, arg)
-}
-
-func (b *configBiz) Update(ctx context.Context, arg *db.UpdateSysConfigByKeyParams) error {
- return b.store.UpdateSysConfigByKey(ctx, arg)
-}
-
-func (b *configBiz) Get(ctx context.Context, id int32) (*db.SysConfig, error) {
- return b.store.GetSysConfig(ctx, id)
-}
-
-func (b *configBiz) List(ctx context.Context, q dto.SearchDto) ([]*db.SysConfig, int64, error) {
- count, err := b.store.CountSysConfigCondition(ctx, q.SearchKey)
- if err != nil {
- return nil, 0, err
- }
-
- configs, err := b.store.ListSysConfigCondition(ctx, &db.ListSysConfigConditionParams{
- Key: q.SearchName,
- Skip: (int32(q.Page) - 1) * int32(q.Rows),
- Size: int32(q.Rows),
- })
- if err != nil {
- return nil, 0, err
- }
-
- return configs, count, nil
-}
-
-func (b *configBiz) Pear(ctx context.Context) (*dto.PearConfig, error) {
- // 判断redis是否存储
- key := know.GetManageKey(ctx, know.PearAdmin)
- bs, err := b.redis.GetBytes(ctx, key)
- if err == nil {
- var res *dto.PearConfig
- if err := json.Unmarshal(bs, &res); err == nil {
- return res, nil
- }
- }
-
- conf, err := b.store.GetSysConfigByKey(ctx, pearadmin.PearKey)
- if err != nil {
- return nil, err
- }
-
- var pear dto.PearConfig
- if err := json.Unmarshal(conf.Value, &pear); err != nil {
- return nil, err
- }
-
- _ = b.redis.Set(ctx, key, conf.Value, time.Hour*6)
- return &pear, nil
-}
diff --git a/internal/erpserver/biz/v1/system/department.go b/internal/erpserver/biz/v1/system/department.go
deleted file mode 100644
index 510dc5e..0000000
--- a/internal/erpserver/biz/v1/system/department.go
+++ /dev/null
@@ -1,251 +0,0 @@
-package system
-
-import (
- "context"
- "encoding/json"
- "errors"
- "fmt"
- "strconv"
- "time"
-
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
- "management/internal/erpserver/model/form"
- "management/internal/erpserver/model/view"
- "management/internal/pkg/convertor"
- "management/internal/pkg/know"
- "management/internal/pkg/redis"
-)
-
-type DepartmentBiz interface {
- Create(ctx context.Context, req *form.Department) error
- Update(ctx context.Context, req *form.Department) error
- All(ctx context.Context) ([]*db.SysDepartment, error)
- List(ctx context.Context, q dto.SearchDto) ([]*db.SysDepartment, int64, error)
- Get(ctx context.Context, id int32) (*db.SysDepartment, error)
- Refresh(ctx context.Context) ([]*db.SysDepartment, error)
- RebuildParentPath(ctx context.Context) error
-
- Tree(ctx context.Context, id int32) ([]*view.LayuiTree, error)
- XmSelectTree(ctx context.Context, id int32) ([]*view.XmSelectTree, error)
-
- DepartmentExpansion
-}
-
-type DepartmentExpansion interface{}
-
-type departmentBiz struct {
- store db.Store
- redis redis.RedisCache
-}
-
-var _ DepartmentBiz = (*departmentBiz)(nil)
-
-func NewDepartment(store db.Store, redis redis.RedisCache) *departmentBiz {
- return &departmentBiz{
- store: store,
- redis: redis,
- }
-}
-
-func (b *departmentBiz) All(ctx context.Context) ([]*db.SysDepartment, error) {
- key := know.GetManageKey(ctx, know.AllDepartments)
- bs, err := redis.GetBytes(ctx, key)
- if err == nil {
- var res []*db.SysDepartment
- if err := json.Unmarshal(bs, &res); err == nil {
- return res, nil
- }
- }
-
- return b.Refresh(ctx)
-}
-
-func (b *departmentBiz) List(ctx context.Context, q dto.SearchDto) ([]*db.SysDepartment, int64, error) {
- countArg := &db.CountSysDepartmentConditionParams{
- IsStatus: q.SearchStatus != 9999,
- Status: int32(q.SearchStatus),
- IsID: q.SearchID != 0,
- ID: int32(q.SearchID),
- IsParentID: q.SearchParentID != 0,
- ParentID: int32(q.SearchParentID),
- Name: q.SearchName,
- }
-
- dataArg := &db.ListSysDepartmentConditionParams{
- IsStatus: q.SearchStatus != 9999,
- Status: int32(q.SearchStatus),
- IsID: q.SearchID != 0,
- ID: int32(q.SearchID),
- IsParentID: q.SearchParentID != 0,
- ParentID: int32(q.SearchParentID),
- Name: q.SearchName,
- Skip: (int32(q.Page) - 1) * int32(q.Rows),
- Size: int32(q.Rows),
- }
- count, err := b.store.CountSysDepartmentCondition(ctx, countArg)
- if err != nil {
- return nil, 0, err
- }
-
- departs, err := b.store.ListSysDepartmentCondition(ctx, dataArg)
- if err != nil {
- return nil, 0, err
- }
-
- return departs, count, nil
-}
-
-func (b *departmentBiz) Get(ctx context.Context, id int32) (*db.SysDepartment, error) {
- return b.store.GetSysDepartment(ctx, id)
-}
-
-func (b *departmentBiz) Create(ctx context.Context, req *form.Department) error {
- parent := &db.SysDepartment{
- ID: 0,
- ParentID: 0,
- ParentPath: ",0,",
- }
- if *req.ParentID > 0 {
- var err error
- parent, err = b.store.GetSysDepartment(ctx, *req.ParentID)
- if err != nil {
- return errors.New("父级节点错误")
- }
- }
-
- var order int32 = 6666
- if *req.Sort > 0 {
- order = *req.Sort
- }
-
- arg := &db.CreateSysDepartmentParams{
- Name: req.Name,
- ParentID: parent.ID,
- ParentPath: convertor.HandleParentPath(fmt.Sprintf("%s,%d,", parent.ParentPath, parent.ID)),
- Status: *req.Status,
- Sort: order,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- }
- _, err := b.store.CreateSysDepartment(ctx, arg)
- if err != nil {
- if db.IsUniqueViolation(err) {
- return errors.New("部门已存在")
- }
- return err
- }
- return nil
-}
-
-func (b *departmentBiz) Update(ctx context.Context, req *form.Department) error {
- parent := &db.SysDepartment{
- ID: 0,
- ParentID: 0,
- ParentPath: ",0,",
- }
- if *req.ParentID > 0 {
- var err error
- parent, err = b.store.GetSysDepartment(ctx, *req.ParentID)
- if err != nil {
- return errors.New("父级节点错误")
- }
- }
-
- depart, err := b.store.GetSysDepartment(ctx, *req.ID)
- if err != nil {
- return err
- }
-
- var order int32 = 6666
- if *req.Sort > 0 {
- order = *req.Sort
- }
-
- arg := &db.UpdateSysDepartmentParams{
- ID: depart.ID,
- Name: req.Name,
- ParentID: parent.ID,
- ParentPath: convertor.HandleParentPath(fmt.Sprintf("%s,%d,", parent.ParentPath, parent.ID)),
- Status: *req.Status,
- Sort: order,
- UpdatedAt: time.Now(),
- }
- _, err = b.store.UpdateSysDepartment(ctx, arg)
- return err
-}
-
-func (b *departmentBiz) Refresh(ctx context.Context) ([]*db.SysDepartment, error) {
- all, err := b.store.AllSysDepartment(ctx)
- if err != nil {
- return nil, err
- }
-
- bs, err := json.Marshal(all)
- if err != nil {
- return nil, err
- }
-
- key := know.GetManageKey(ctx, know.AllDepartments)
- err = redis.Set(ctx, key, bs, time.Hour*6)
- if err != nil {
- return nil, err
- }
- return all, nil
-}
-
-func (b *departmentBiz) RebuildParentPath(ctx context.Context) error {
- return b.store.SysDepartmentRebuildPath(ctx)
-}
-
-func (b *departmentBiz) Tree(ctx context.Context, id int32) ([]*view.LayuiTree, error) {
- all, err := b.All(ctx)
- if err != nil {
- return nil, err
- }
-
- return b.toTree(id, all), nil
-}
-
-func (b *departmentBiz) XmSelectTree(ctx context.Context, id int32) ([]*view.XmSelectTree, error) {
- all, err := b.All(ctx)
- if err != nil {
- return nil, err
- }
-
- return b.toXmSelectTree(id, all), nil
-}
-
-func (b *departmentBiz) toTree(parentId int32, data []*db.SysDepartment) []*view.LayuiTree {
- var res []*view.LayuiTree
- for _, v := range data {
- if v.ParentID == parentId {
- item := view.LayuiTree{}
- item.ID = strconv.FormatInt(int64(v.ID), 10)
- item.Title = v.Name
- item.Children = b.toTree(v.ID, data)
- if v.ParentID == 0 {
- item.Spread = true
- }
- res = append(res, &item)
- }
- }
-
- return res
-}
-
-func (b *departmentBiz) toXmSelectTree(parentId int32, data []*db.SysDepartment) []*view.XmSelectTree {
- var res []*view.XmSelectTree
- for _, v := range data {
- if v.ParentID == parentId {
- item := view.XmSelectTree{
- Name: v.Name,
- Value: strconv.FormatInt(int64(v.ID), 10),
- Children: b.toXmSelectTree(v.ID, data),
- }
- res = append(res, &item)
- }
- }
-
- return res
-}
diff --git a/internal/erpserver/biz/v1/system/login_log.go b/internal/erpserver/biz/v1/system/login_log.go
deleted file mode 100644
index c1c040b..0000000
--- a/internal/erpserver/biz/v1/system/login_log.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package system
-
-import (
- "context"
-
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
- systemmodel "management/internal/erpserver/model/system"
- "management/internal/erpserver/store"
-)
-
-type LoginLogBiz interface {
- Create(ctx context.Context, obj *systemmodel.LoginLog) error
- List(ctx context.Context, q dto.SearchDto) ([]*systemmodel.LoginLog, int64, error)
-}
-
-type loginLogBiz struct {
- database store.IStore
- store db.Store
-}
-
-var _ LoginLogBiz = (*loginLogBiz)(nil)
-
-func NewLoginLog(database store.IStore, store db.Store) *loginLogBiz {
- return &loginLogBiz{
- database: database,
- store: store,
- }
-}
-
-func (b *loginLogBiz) Create(ctx context.Context, obj *systemmodel.LoginLog) error {
- return b.database.LoginLog().Create(ctx, obj)
-}
-
-func (b *loginLogBiz) List(ctx context.Context, q dto.SearchDto) ([]*systemmodel.LoginLog, int64, error) {
- res, count, err := b.database.LoginLog().List(ctx, q)
- if err != nil {
- return nil, 0, err
- }
-
- return res, count, nil
-}
diff --git a/internal/erpserver/biz/v1/system/menu.go b/internal/erpserver/biz/v1/system/menu.go
deleted file mode 100644
index 28bd945..0000000
--- a/internal/erpserver/biz/v1/system/menu.go
+++ /dev/null
@@ -1,545 +0,0 @@
-package system
-
-import (
- "context"
- "encoding/json"
- "slices"
- "strconv"
- "strings"
- "time"
-
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
- "management/internal/erpserver/model/view"
- "management/internal/pkg/know"
- "management/internal/pkg/redis"
-)
-
-type MenuBiz interface {
- MenuExpansion
-}
-
-type MenuExpansion interface {
- Create(ctx context.Context, arg *db.CreateSysMenuParams) (*db.SysMenu, error)
- Update(ctx context.Context, arg *db.UpdateSysMenuParams) (*db.SysMenu, error)
- Get(ctx context.Context, id int32) (*db.SysMenu, error)
- GetSysMenuByUrl(ctx context.Context, url string) (*db.SysMenu, error)
- AllMenusCache(ctx context.Context) ([]*db.SysMenu, error)
- ListMenuTree(ctx context.Context) ([]*db.SysMenuDto, error)
- ListOwnerMenuByRoleID(ctx context.Context, roleID int32) ([]*dto.OwnerMenuDto, error)
- SetOwnerListMenuByRoleID(ctx context.Context, roleID int32) ([]*dto.OwnerMenuDto, error)
- RecursiveSysMenus(ctx context.Context, roleID int32) ([]*dto.MenuUIDto, error)
- SetRecursiveSysMenus(ctx context.Context, roleID int32) ([]*dto.MenuUIDto, error)
- MapOwnerMenuByRoleID(ctx context.Context, roleID int32) (map[string]*dto.OwnerMenuDto, error)
- SetOwnerMapMenuByRoleID(ctx context.Context, roleID int32) (map[string]*dto.OwnerMenuDto, error)
- RefreshMenus(ctx context.Context) error
- SetMenuViewData(ctx context.Context, roleID int32) ([]*dto.SetMenuDto, error)
-
- Tree(ctx context.Context, id int32) ([]*view.LayuiTree, error)
- XmSelectTree(ctx context.Context, id int32) ([]*view.XmSelectTree, error)
- SetMenu(ctx context.Context, roleID int32, menus []*db.SysMenu) error
-}
-
-type menuBiz struct {
- store db.Store
- redis redis.RedisCache
-}
-
-var _ MenuBiz = (*menuBiz)(nil)
-
-func NewMenu(store db.Store, redis redis.RedisCache) *menuBiz {
- return &menuBiz{
- store: store,
- redis: redis,
- }
-}
-
-func (b *menuBiz) Create(ctx context.Context, arg *db.CreateSysMenuParams) (*db.SysMenu, error) {
- return b.store.CreateSysMenu(ctx, arg)
-}
-
-func (b *menuBiz) Update(ctx context.Context, arg *db.UpdateSysMenuParams) (*db.SysMenu, error) {
- return b.store.UpdateSysMenu(ctx, arg)
-}
-
-func (b *menuBiz) Get(ctx context.Context, id int32) (*db.SysMenu, error) {
- return b.store.GetSysMenu(ctx, id)
-}
-
-func (b *menuBiz) GetSysMenuByUrl(ctx context.Context, url string) (*db.SysMenu, error) {
- return b.store.GetSysMenuByUrl(ctx, url)
-}
-
-func (b *menuBiz) AllMenusCache(ctx context.Context) ([]*db.SysMenu, error) {
- key := know.GetManageKey(ctx, know.AllMenus)
- bs, err := b.redis.GetBytes(ctx, key)
- if err == nil {
- var res []*db.SysMenu
- if err := json.Unmarshal(bs, &res); err == nil {
- return res, nil
- }
- }
-
- all, err := b.store.AllSysMenu(ctx)
- if err != nil {
- return nil, err
- }
-
- bs, err = json.Marshal(all)
- if err != nil {
- return nil, err
- }
-
- _ = redis.Set(ctx, key, bs, time.Hour*6)
- return all, nil
-}
-
-func (b *menuBiz) ListMenuTree(ctx context.Context) ([]*db.SysMenuDto, error) {
- all, err := b.AllMenusCache(ctx)
- if err != nil {
- return nil, err
- }
-
- return toTreeSysMenu(0, all), nil
-}
-
-func (b *menuBiz) ListOwnerMenuByRoleID(ctx context.Context, roleID int32) ([]*dto.OwnerMenuDto, error) {
- // 判断redis是否存储
- key := know.GetManageKey(ctx, know.OwnerMenus, roleID)
- bs, err := b.redis.GetBytes(ctx, key)
- if err == nil {
- var res []*dto.OwnerMenuDto
- if err := json.Unmarshal(bs, &res); err == nil {
- return res, nil
- }
- }
-
- return b.SetOwnerListMenuByRoleID(ctx, roleID)
-}
-
-func (b *menuBiz) SetOwnerListMenuByRoleID(ctx context.Context, roleID int32) ([]*dto.OwnerMenuDto, error) {
- menus, err := b.ownerMenusByRoleID(ctx, roleID)
- if err != nil {
- return nil, err
- }
-
- var res []*dto.OwnerMenuDto
- for _, menu := range menus {
- res = append(res, &dto.OwnerMenuDto{
- ID: menu.ID,
- DisplayName: menu.DisplayName,
- Url: menu.Url,
- ParentID: menu.ParentID,
- Avatar: menu.Avatar,
- Style: menu.Style,
- IsList: menu.IsList,
- })
- }
-
- bs, err := json.Marshal(res)
- if err != nil {
- return nil, err
- }
-
- key := know.GetManageKey(ctx, know.OwnerMenus, roleID)
- _ = redis.Set(ctx, key, bs, time.Hour*6)
- return res, nil
-}
-
-func (b *menuBiz) RecursiveSysMenus(ctx context.Context, roleID int32) ([]*dto.MenuUIDto, error) {
- // 判断redis是否存储
- key := know.GetManageKey(ctx, know.RecursiveMenus, roleID)
- bs, err := b.redis.GetBytes(ctx, key)
- if err == nil {
- var res []*dto.MenuUIDto
- if err := json.Unmarshal(bs, &res); err == nil {
- return res, nil
- }
- }
-
- return b.SetRecursiveSysMenus(ctx, roleID)
-}
-
-func (b *menuBiz) SetRecursiveSysMenus(ctx context.Context, roleID int32) ([]*dto.MenuUIDto, error) {
- // 判断当前用户是否有vip角色
- role, err := b.store.GetSysRole(ctx, roleID)
- if err != nil {
- return nil, err
- }
-
- var menus []*db.SysMenu
- if role.Vip {
- // vip 用户
- all, err := b.store.RecursiveSysMenus(ctx)
- if err != nil {
- return nil, err
- }
- menus = convertToMenuUIDto(all)
-
- } else {
- // not vip
- all, err := b.store.RecursiveSysMenusByRoleID(ctx, roleID)
- if err != nil {
- return nil, err
- }
- menus = convertToMenuUIDto2(all)
- }
- menuList := uniqueSysMenus(menus)
- if len(menuList) == 0 {
- return nil, nil
- }
-
- tree := convertToUITree(menuList, 0)
- bs, err := json.Marshal(tree)
- if err != nil {
- return nil, err
- }
-
- key := know.GetManageKey(ctx, know.RecursiveMenus, roleID)
- _ = redis.Set(ctx, key, bs, time.Hour*6)
- return tree, nil
-}
-
-func (b *menuBiz) MapOwnerMenuByRoleID(ctx context.Context, roleID int32) (map[string]*dto.OwnerMenuDto, error) {
- // 判断redis是否存储
- key := know.GetManageKey(ctx, know.OwnerMenus, roleID)
- bs, err := b.redis.GetBytes(ctx, key)
- if err == nil {
- var res map[string]*dto.OwnerMenuDto
- if err := json.Unmarshal(bs, &res); err == nil {
- return res, nil
- }
- }
-
- return b.SetOwnerMapMenuByRoleID(ctx, roleID)
-}
-
-func (b *menuBiz) SetOwnerMapMenuByRoleID(ctx context.Context, roleID int32) (map[string]*dto.OwnerMenuDto, error) {
- result := make(map[string]*dto.OwnerMenuDto)
- menus, err := b.ownerMenusByRoleID(ctx, roleID)
- if err != nil {
- return result, err
- }
-
- for _, menu := range menus {
- result[menu.Url] = &dto.OwnerMenuDto{
- ID: menu.ID,
- DisplayName: menu.DisplayName,
- Url: menu.Url,
- ParentID: menu.ParentID,
- Avatar: menu.Avatar,
- Style: menu.Style,
- IsList: menu.IsList,
- }
- }
-
- bs, err := json.Marshal(result)
- if err != nil {
- return nil, err
- }
-
- key := know.GetManageKey(ctx, know.OwnerMenus, roleID)
- _ = redis.Set(ctx, key, bs, time.Hour*6)
- return result, nil
-}
-
-func (b *menuBiz) RefreshMenus(ctx context.Context) error {
- all, err := b.store.AllSysMenu(ctx)
- if err != nil {
- return err
- }
-
- bs, err := json.Marshal(all)
- if err != nil {
- return err
- }
-
- key := know.GetManageKey(ctx, know.AllMenus)
- err = redis.Set(ctx, key, bs, time.Hour*6)
- return err
-}
-
-func (b *menuBiz) Tree(ctx context.Context, id int32) ([]*view.LayuiTree, error) {
- all, err := b.AllMenusCache(ctx)
- if err != nil {
- return nil, err
- }
-
- return b.toTree(id, all), nil
-}
-
-func (b *menuBiz) XmSelectTree(ctx context.Context, id int32) ([]*view.XmSelectTree, error) {
- all, err := b.AllMenusCache(ctx)
- if err != nil {
- return nil, err
- }
-
- return b.toXmSelectTree(id, all), nil
-}
-
-func (b *menuBiz) SetMenu(ctx context.Context, roleID int32, menus []*db.SysMenu) error {
- return b.store.ExecTx(ctx, func(q *db.Queries) error {
- err := q.DeleteRoleMneuByRoleID(ctx, roleID)
- if err != nil {
- return err
- }
-
- for _, m := range menus {
- err := q.CreateRoleMenu(ctx, &db.CreateRoleMenuParams{
- RoleID: roleID,
- MenuID: m.ID,
- })
- if err != nil {
- return err
- }
- }
-
- return nil
- })
-}
-
-func (b *menuBiz) SetMenuViewData(ctx context.Context, roleID int32) ([]*dto.SetMenuDto, error) {
- // 获取该用户已经有的权限
- hs, err := b.store.ListSysMenuIDByRoleID(ctx, roleID)
- if err != nil {
- return nil, err
- }
-
- all, err := b.AllMenusCache(ctx)
- if err != nil {
- return nil, err
- }
-
- return toSetMenuTree(all, hs, 0), nil
-}
-
-func (b *menuBiz) ownerMenusByRoleID(ctx context.Context, roleID int32) ([]*db.SysMenu, error) {
- // 判断当前用户是否有vip角色
- role, err := b.store.GetSysRole(ctx, roleID)
- if err != nil {
- return nil, err
- }
-
- var e error
- var menus []*db.SysMenu
- if role.Vip {
- // vip 用户
- menus, e = b.store.AllSysMenu(ctx)
- if e != nil {
- return nil, err
- }
-
- } else {
- // not vip
- menus, e = b.store.ListSysMenuByRoleID(ctx, roleID)
- if e != nil {
- return nil, err
- }
- }
-
- return menus, nil
-}
-
-func (b *menuBiz) toTree(parentId int32, data []*db.SysMenu) []*view.LayuiTree {
- var res []*view.LayuiTree
- for _, v := range data {
- if v.ParentID == parentId {
- item := view.LayuiTree{}
- item.ID = strconv.FormatInt(int64(v.ID), 10)
- item.Title = v.DisplayName
- item.Children = b.toTree(v.ID, data)
- if v.ParentID == 0 {
- item.Spread = true
- }
- res = append(res, &item)
- }
- }
-
- return res
-}
-
-func (b *menuBiz) toXmSelectTree(parentId int32, data []*db.SysMenu) []*view.XmSelectTree {
- var res []*view.XmSelectTree
- for _, v := range data {
- if v.ParentID == parentId {
- item := view.XmSelectTree{
- Name: v.DisplayName,
- Value: strconv.FormatInt(int64(v.ID), 10),
- Children: b.toXmSelectTree(v.ID, data),
- }
- res = append(res, &item)
- }
- }
-
- return res
-}
-
-func toTreeSysMenu(parentId int32, data []*db.SysMenu) []*db.SysMenuDto {
- var res []*db.SysMenuDto
- for _, v := range data {
- if v.ParentID == parentId {
- item := db.SysMenuDto{}
- item.ID = v.ID
- item.Name = v.Name
- item.DisplayName = v.DisplayName
- item.Url = v.Url
- item.Type = v.Type
- item.ParentID = v.ParentID
- item.ParentPath = v.ParentPath
- item.Avatar = v.Avatar
- item.Style = v.Style
- item.Visible = v.Visible
- item.IsList = v.IsList
- item.Status = v.Status
- item.Sort = v.Sort
- item.CreatedAt = v.CreatedAt
- item.UpdatedAt = v.UpdatedAt
- item.Children = toTreeSysMenu(v.ID, data)
- res = append(res, &item)
- }
- }
-
- return res
-}
-
-func convertToMenuUIDto(data []*db.RecursiveSysMenusRow) []*db.SysMenu {
- var res []*db.SysMenu
-
- for _, item := range data {
- temp := &db.SysMenu{
- ID: item.ID,
- Name: item.Name,
- DisplayName: item.DisplayName,
- Url: item.Url,
- Type: item.Type,
- ParentID: item.ParentID,
- ParentPath: item.ParentPath,
- Avatar: item.Avatar,
- Style: item.Style,
- Visible: item.Visible,
- IsList: item.IsList,
- Status: item.Status,
- Sort: item.Sort,
- CreatedAt: item.CreatedAt,
- UpdatedAt: item.UpdatedAt,
- }
- res = append(res, temp)
- }
-
- return res
-}
-
-func convertToMenuUIDto2(data []*db.RecursiveSysMenusByRoleIDRow) []*db.SysMenu {
- var res []*db.SysMenu
-
- for _, item := range data {
- temp := &db.SysMenu{
- ID: item.ID,
- Name: item.Name,
- DisplayName: item.DisplayName,
- Url: item.Url,
- Type: item.Type,
- ParentID: item.ParentID,
- ParentPath: item.ParentPath,
- Avatar: item.Avatar,
- Style: item.Style,
- Visible: item.Visible,
- IsList: item.IsList,
- Status: item.Status,
- Sort: item.Sort,
- CreatedAt: item.CreatedAt,
- UpdatedAt: item.UpdatedAt,
- }
- res = append(res, temp)
- }
-
- return res
-}
-
-func convertToUITree(data []*db.SysMenu, parentID int32) []*dto.MenuUIDto {
- var root []*dto.MenuUIDto
- for _, item := range data {
- if item.ParentID == parentID {
- if item.IsList {
- temp := &dto.MenuUIDto{
- ID: strings.ToLower(item.Url),
- Title: item.DisplayName,
- Icon: item.Avatar,
- Type: 1,
- OpenType: "_iframe",
- // OpenType: "_component",
- Href: item.Url,
- }
- root = append(root, temp)
- } else {
- temp := &dto.MenuUIDto{
- ID: strconv.Itoa(int(item.ID)),
- Title: item.DisplayName,
- Icon: item.Avatar,
- Type: 0,
- }
- temp.Children = convertToUITree(data, item.ID)
- root = append(root, temp)
- }
- }
- }
- return root
-}
-
-func uniqueSysMenus(sm []*db.SysMenu) []*db.SysMenu {
- res := make([]*db.SysMenu, 0) // 返回的新切片
- m1 := make(map[int32]byte) // 用来去重的临时map
- for _, v := range sm {
- if _, ok := m1[v.ID]; !ok {
- m1[v.ID] = 1
- res = append(res, v)
- }
- }
- return res
-}
-
-func toSetMenuTree(data []*db.SysMenu, ids []int32, parentID int32) []*dto.SetMenuDto {
- var res []*dto.SetMenuDto
- for _, v := range data {
- if v.ParentID == parentID {
- isSelect := hasValueInArray(ids, v.ID)
- if v.IsList {
- item := dto.SetMenuDto{
- ID: v.ID,
- Name: v.DisplayName,
- Link: v.Type,
- IsList: v.IsList,
- IsSelect: isSelect,
- }
- item.Items = []*dto.SetMenuDto{
- {
- ID: v.ID,
- Name: "列表",
- Link: "btn",
- IsList: false,
- IsSelect: isSelect,
- Items: toSetMenuTree(data, ids, v.ID),
- },
- }
- item.Items = append(item.Items, toSetMenuTree(data, ids, v.ID)...)
- res = append(res, &item)
- } else {
- item := dto.SetMenuDto{
- ID: v.ID,
- Name: v.DisplayName,
- Link: v.Type,
- IsList: v.IsList,
- IsSelect: isSelect,
- Items: toSetMenuTree(data, ids, v.ID),
- }
- res = append(res, &item)
- }
- }
- }
-
- return res
-}
-
-func hasValueInArray(data []int32, id int32) bool {
- return slices.Contains(data, id)
-}
diff --git a/internal/erpserver/biz/v1/system/role.go b/internal/erpserver/biz/v1/system/role.go
deleted file mode 100644
index fbfac4a..0000000
--- a/internal/erpserver/biz/v1/system/role.go
+++ /dev/null
@@ -1,313 +0,0 @@
-package system
-
-import (
- "context"
- "encoding/json"
- "errors"
- "fmt"
- "strconv"
- "time"
-
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
- "management/internal/erpserver/model/form"
- "management/internal/erpserver/model/view"
- "management/internal/pkg/convertor"
- "management/internal/pkg/know"
- "management/internal/pkg/redis"
-)
-
-type RoleBiz interface {
- Create(ctx context.Context, req *form.Role) error
- Update(ctx context.Context, req *form.Role) error
- CreateOrUpdate(ctx context.Context, req *form.Role) error
- All(ctx context.Context) ([]*db.SysRole, error)
- List(ctx context.Context, q dto.SearchDto) ([]*db.SysRole, int64, error)
- Get(ctx context.Context, id int32) (*db.SysRole, error)
- Refresh(ctx context.Context) ([]*db.SysRole, error)
- RebuildParentPath(ctx context.Context) error
-
- Tree(ctx context.Context, id int32) ([]*view.LayuiTree, error)
- XmSelectTree(ctx context.Context, id int32) ([]*view.XmSelectTree, error)
-
- RoleExpansion
-}
-
-type RoleExpansion interface{}
-
-type roleBiz struct {
- store db.Store
- redis redis.RedisCache
-}
-
-var _ RoleBiz = (*roleBiz)(nil)
-
-func NewRole(store db.Store, redis redis.RedisCache) *roleBiz {
- return &roleBiz{
- store: store,
- redis: redis,
- }
-}
-
-func (b *roleBiz) Create(ctx context.Context, req *form.Role) error {
- parent := &db.SysRole{
- ID: 0,
- ParentID: 0,
- ParentPath: ",0,",
- }
- if *req.ParentID > 0 {
- var err error
- parent, err = b.store.GetSysRole(ctx, *req.ParentID)
- if err != nil {
- return errors.New("父级节点错误")
- }
- }
-
- var order int32 = 6666
- if *req.Sort > 0 {
- order = *req.Sort
- }
-
- arg := &db.CreateSysRoleParams{
- Name: req.Name,
- DisplayName: req.DisplayName,
- Vip: false,
- ParentID: parent.ID,
- ParentPath: convertor.HandleParentPath(fmt.Sprintf("%s,%d,", parent.ParentPath, parent.ID)),
- Status: *req.Status,
- Sort: order,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- }
- _, err := b.store.CreateSysRole(ctx, arg)
- if err != nil {
- if db.IsUniqueViolation(err) {
- return errors.New("角色名称已存在")
- }
- return err
- }
- return nil
-}
-
-func (b *roleBiz) Update(ctx context.Context, req *form.Role) error {
- parent := &db.SysRole{
- ID: 0,
- ParentID: 0,
- ParentPath: ",0,",
- }
- if *req.ParentID > 0 {
- var err error
- parent, err = b.store.GetSysRole(ctx, *req.ParentID)
- if err != nil {
- return errors.New("父级节点错误")
- }
- }
-
- role, err := b.store.GetSysRole(ctx, *req.ID)
- if err != nil {
- return err
- }
-
- var order int32 = 6666
- if *req.Sort > 0 {
- order = *req.Sort
- }
-
- arg := &db.UpdateSysRoleParams{
- ID: role.ID,
- DisplayName: req.DisplayName,
- Status: *req.Status,
- ParentID: parent.ID,
- ParentPath: convertor.HandleParentPath(fmt.Sprintf("%s,%d,", parent.ParentPath, parent.ID)),
- Sort: order,
- UpdatedAt: time.Now(),
- }
- _, err = b.store.UpdateSysRole(ctx, arg)
- return err
-}
-
-func (b *roleBiz) CreateOrUpdate(ctx context.Context, req *form.Role) error {
- parent := &db.SysRole{
- ID: 0,
- ParentID: 0,
- ParentPath: ",0,",
- }
- if *req.ParentID > 0 {
- var err error
- parent, err = b.store.GetSysRole(ctx, *req.ParentID)
- if err != nil {
- return errors.New("父级节点错误")
- }
- }
-
- var order int32 = 6666
- if *req.Sort > 0 {
- order = *req.Sort
- }
-
- if *req.ID > 0 {
- role, err := b.store.GetSysRole(ctx, *req.ID)
- if err != nil {
- return err
- }
-
- arg := &db.UpdateSysRoleParams{
- ID: role.ID,
- DisplayName: req.DisplayName,
- Status: *req.Status,
- ParentID: parent.ID,
- ParentPath: convertor.HandleParentPath(fmt.Sprintf("%s,%d,", parent.ParentPath, parent.ID)),
- Sort: order,
- UpdatedAt: time.Now(),
- }
- _, err = b.store.UpdateSysRole(ctx, arg)
- return err
- } else {
- arg := &db.CreateSysRoleParams{
- Name: req.Name,
- DisplayName: req.DisplayName,
- Vip: false,
- ParentID: parent.ID,
- ParentPath: convertor.HandleParentPath(fmt.Sprintf("%s,%d,", parent.ParentPath, parent.ID)),
- Status: *req.Status,
- Sort: order,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- }
- _, err := b.store.CreateSysRole(ctx, arg)
- if err != nil {
- if db.IsUniqueViolation(err) {
- return errors.New("角色名称已存在")
- }
- return err
- }
- return nil
- }
-}
-
-func (b *roleBiz) All(ctx context.Context) ([]*db.SysRole, error) {
- key := know.GetManageKey(ctx, know.AllRoles)
- bs, err := redis.GetBytes(ctx, key)
- if err == nil {
- var res []*db.SysRole
- if err := json.Unmarshal(bs, &res); err == nil {
- return res, nil
- }
- }
-
- return b.Refresh(ctx)
-}
-
-func (b *roleBiz) List(ctx context.Context, q dto.SearchDto) ([]*db.SysRole, int64, error) {
- countArg := &db.CountSysRoleConditionParams{
- IsStatus: q.SearchStatus != 9999,
- Status: int32(q.SearchStatus),
- IsID: q.SearchID != 0,
- ID: int32(q.SearchID),
- IsParentID: q.SearchParentID != 0,
- ParentID: int32(q.SearchParentID),
- DisplayName: q.SearchName,
- }
-
- dataArg := &db.ListSysRoleConditionParams{
- IsStatus: q.SearchStatus != 9999,
- Status: int32(q.SearchStatus),
- IsID: q.SearchID != 0,
- ID: int32(q.SearchID),
- IsParentID: q.SearchParentID != 0,
- ParentID: int32(q.SearchParentID),
- DisplayName: q.SearchName,
- Skip: (int32(q.Page) - 1) * int32(q.Rows),
- Size: int32(q.Rows),
- }
- count, err := b.store.CountSysRoleCondition(ctx, countArg)
- if err != nil {
- return nil, 0, err
- }
-
- departs, err := b.store.ListSysRoleCondition(ctx, dataArg)
- if err != nil {
- return nil, 0, err
- }
-
- return departs, count, nil
-}
-
-func (b *roleBiz) Get(ctx context.Context, id int32) (*db.SysRole, error) {
- return b.store.GetSysRole(ctx, id)
-}
-
-func (b *roleBiz) Refresh(ctx context.Context) ([]*db.SysRole, error) {
- all, err := b.store.AllSysRole(ctx)
- if err != nil {
- return nil, err
- }
-
- bs, err := json.Marshal(all)
- if err != nil {
- return nil, err
- }
-
- key := know.GetManageKey(ctx, know.AllRoles)
- err = redis.Set(ctx, key, bs, time.Hour*6)
- if err != nil {
- return nil, err
- }
- return all, nil
-}
-
-func (b *roleBiz) RebuildParentPath(ctx context.Context) error {
- return b.store.SysRoleRebuildPath(ctx)
-}
-
-func (b *roleBiz) Tree(ctx context.Context, id int32) ([]*view.LayuiTree, error) {
- all, err := b.All(ctx)
- if err != nil {
- return nil, err
- }
-
- return b.toTree(id, all), nil
-}
-
-func (b *roleBiz) XmSelectTree(ctx context.Context, id int32) ([]*view.XmSelectTree, error) {
- all, err := b.All(ctx)
- if err != nil {
- return nil, err
- }
-
- return b.toXmSelectTree(id, all), nil
-}
-
-func (b *roleBiz) toTree(parentId int32, data []*db.SysRole) []*view.LayuiTree {
- var res []*view.LayuiTree
- for _, v := range data {
- if v.ParentID == parentId {
- item := view.LayuiTree{}
- item.ID = strconv.FormatInt(int64(v.ID), 10)
- item.Title = v.DisplayName
- item.Children = b.toTree(v.ID, data)
- if v.ParentID == 0 {
- item.Spread = true
- }
- res = append(res, &item)
- }
- }
-
- return res
-}
-
-func (b *roleBiz) toXmSelectTree(parentId int32, data []*db.SysRole) []*view.XmSelectTree {
- var res []*view.XmSelectTree
- for _, v := range data {
- if v.ParentID == parentId {
- item := view.XmSelectTree{
- Name: v.DisplayName,
- Value: strconv.FormatInt(int64(v.ID), 10),
- Children: b.toXmSelectTree(v.ID, data),
- }
- res = append(res, &item)
- }
- }
-
- return res
-}
diff --git a/internal/erpserver/biz/v1/system/system.go b/internal/erpserver/biz/v1/system/system.go
deleted file mode 100644
index 5b96a76..0000000
--- a/internal/erpserver/biz/v1/system/system.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package system
-
-import (
- db "management/internal/db/sqlc"
- "management/internal/erpserver/store"
- "management/internal/pkg/redis"
- "management/internal/pkg/session"
-
- "github.com/drhin/logger"
-)
-
-type SystemBiz interface {
- UserBiz() UserBiz
- MenuBiz() MenuBiz
- RoleBiz() RoleBiz
- DepartmentBiz() DepartmentBiz
- ConfigBiz() ConfigBiz
- AuditBiz() AuditBiz
- LoginLogBiz() LoginLogBiz
- CategoryBiz() CategoryBiz
-}
-
-type systemBiz struct {
- database store.IStore
- store db.Store
- redis redis.RedisCache
- session session.Session
- logger *logger.Logger
-}
-
-var _ SystemBiz = (*systemBiz)(nil)
-
-func New(database store.IStore, store db.Store, redis redis.RedisCache, session session.Session, logger *logger.Logger) *systemBiz {
- return &systemBiz{
- database: database,
- store: store,
- redis: redis,
- session: session,
- logger: logger,
- }
-}
-
-func (b *systemBiz) UserBiz() UserBiz {
- return NewUser(b.database, b.store, b.session, b.logger)
-}
-
-func (b *systemBiz) MenuBiz() MenuBiz {
- return NewMenu(b.store, b.redis)
-}
-
-func (b *systemBiz) RoleBiz() RoleBiz {
- return NewRole(b.store, b.redis)
-}
-
-func (b *systemBiz) DepartmentBiz() DepartmentBiz {
- return NewDepartment(b.store, b.redis)
-}
-
-func (b *systemBiz) ConfigBiz() ConfigBiz {
- return NewConfig(b.store, b.redis)
-}
-
-func (b *systemBiz) AuditBiz() AuditBiz {
- return NewAudit(b.store)
-}
-
-func (b *systemBiz) LoginLogBiz() LoginLogBiz {
- return NewLoginLog(b.database, b.store)
-}
-
-func (b *systemBiz) CategoryBiz() CategoryBiz {
- return NewCategory(b.store, b.redis)
-}
diff --git a/internal/erpserver/biz/v1/system/user.go b/internal/erpserver/biz/v1/system/user.go
deleted file mode 100644
index 613a32c..0000000
--- a/internal/erpserver/biz/v1/system/user.go
+++ /dev/null
@@ -1,253 +0,0 @@
-package system
-
-import (
- "context"
- "encoding/json"
- "errors"
- "strconv"
- "time"
-
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
- "management/internal/erpserver/model/form"
- systemmodel "management/internal/erpserver/model/system"
- "management/internal/erpserver/model/view"
- "management/internal/erpserver/store"
- "management/internal/pkg/crypto"
- "management/internal/pkg/know"
- "management/internal/pkg/rand"
- "management/internal/pkg/session"
-
- "github.com/drhin/logger"
- "github.com/google/uuid"
- "go.uber.org/zap"
-)
-
-// UserBiz 定义处理用户请求所需的方法.
-type UserBiz interface {
- Create(ctx context.Context, req *form.User) error
- Update(ctx context.Context, req *form.User) error
- All(ctx context.Context) ([]*db.SysUser, error)
- List(ctx context.Context, q dto.SearchDto) ([]*db.ListSysUserConditionRow, int64, error)
- Get(ctx context.Context, id int32) (*db.SysUser, error)
-
- XmSelect(ctx context.Context) ([]*view.XmSelect, error)
-
- UserExpansion
-}
-
-// UserExpansion 定义用户操作的扩展方法.
-type UserExpansion interface {
- Login(ctx context.Context, req *form.Login) error
-}
-
-// userBiz 是 UserBiz 接口的实现.
-type userBiz struct {
- database store.IStore
- store db.Store
- session session.Session
- log *logger.Logger
-}
-
-// 确保 userBiz 实现了 UserBiz 接口.
-var _ UserBiz = (*userBiz)(nil)
-
-func NewUser(database store.IStore, store db.Store, session session.Session, log *logger.Logger) *userBiz {
- return &userBiz{
- database: database,
- store: store,
- session: session,
- log: log,
- }
-}
-
-func (b *userBiz) Create(ctx context.Context, req *form.User) error {
- salt, err := rand.String(10)
- if err != nil {
- return err
- }
-
- hashedPassword, err := crypto.BcryptHashPassword(req.Password + salt)
- if err != nil {
- return err
- }
-
- initTime, err := time.ParseInLocation(time.DateTime, "0001-01-01 00:00:00", time.Local)
- if err != nil {
- return err
- }
-
- arg := &db.CreateSysUserParams{
- Uuid: uuid.Must(uuid.NewV7()),
- Email: req.Email,
- Username: req.Username,
- HashedPassword: hashedPassword,
- Salt: salt,
- Avatar: req.Avatar,
- Gender: req.Gender,
- DepartmentID: req.DepartmentID,
- RoleID: req.RoleID,
- Status: *req.Status,
- ChangePasswordAt: initTime,
- CreatedAt: time.Now(),
- UpdatedAt: time.Now(),
- }
- _, err = b.store.CreateSysUser(ctx, arg)
- if err != nil {
- if db.IsUniqueViolation(err) {
- return errors.New("用户已经存在")
- }
- return err
- }
- return nil
-}
-
-func (b *userBiz) Update(ctx context.Context, req *form.User) error {
- user, err := b.store.GetSysUser(ctx, *req.ID)
- if err != nil {
- return err
- }
-
- arg := &db.UpdateSysUserParams{
- ID: user.ID,
- Username: req.Username,
- HashedPassword: user.HashedPassword,
- Avatar: req.Avatar,
- Gender: req.Gender,
- DepartmentID: req.DepartmentID,
- RoleID: req.RoleID,
- Status: *req.Status,
- ChangePasswordAt: user.ChangePasswordAt,
- UpdatedAt: time.Now(),
- }
- if req.ChangePassword == "on" {
- hashedPassword, err := crypto.BcryptHashPassword(req.Password + user.Salt)
- if err != nil {
- return err
- }
- arg.HashedPassword = hashedPassword
- arg.ChangePasswordAt = time.Now()
- }
- _, err = b.store.UpdateSysUser(ctx, arg)
- return err
-}
-
-func (b *userBiz) All(ctx context.Context) ([]*db.SysUser, error) {
- return b.store.ListSysUser(ctx)
-}
-
-func (b *userBiz) List(ctx context.Context, q dto.SearchDto) ([]*db.ListSysUserConditionRow, int64, error) {
- count, err := b.store.CountSysUserCondition(ctx, &db.CountSysUserConditionParams{
- IsStatus: q.SearchStatus != 9999,
- Status: int32(q.SearchStatus),
- IsID: q.SearchID != 0,
- ID: int32(q.SearchID),
- Username: q.SearchName,
- Email: q.SearchEmail,
- })
- if err != nil {
- return nil, 0, err
- }
-
- users, err := b.store.ListSysUserCondition(ctx, &db.ListSysUserConditionParams{
- IsStatus: q.SearchStatus != 9999,
- Status: int32(q.SearchStatus),
- IsID: q.SearchID != 0,
- ID: int32(q.SearchID),
- Username: q.SearchName,
- Email: q.SearchEmail,
- Skip: (int32(q.Page) - 1) * int32(q.Rows),
- Size: int32(q.Rows),
- })
- if err != nil {
- return nil, 0, err
- }
-
- return users, count, nil
-}
-
-func (b *userBiz) Get(ctx context.Context, id int32) (*db.SysUser, error) {
- return b.store.GetSysUser(ctx, id)
-}
-
-func (b *userBiz) XmSelect(ctx context.Context) ([]*view.XmSelect, error) {
- all, err := b.store.ListSysUser(ctx)
- if err != nil || len(all) == 0 {
- return nil, err
- }
-
- var res []*view.XmSelect
- for _, user := range all {
- res = append(res, &view.XmSelect{
- Name: user.Username,
- Value: strconv.Itoa(int(user.ID)),
- })
- }
- return res, nil
-}
-
-func (b *userBiz) Login(ctx context.Context, req *form.Login) error {
- l := systemmodel.NewLoginLog(req.Email, req.Os, req.Ip, req.Browser, req.Url, req.Referrer)
- err := b.login(ctx, req)
- if err != nil {
- if err := b.database.LoginLog().Create(ctx, l.SetMessage(err.Error())); err != nil {
- b.log.Error(err.Error(), err, zap.Any("login_log", l))
- }
- return err
- }
-
- if err := b.database.LoginLog().Create(ctx, l.SetOk("登录成功")); err != nil {
- b.log.Error(err.Error(), err, zap.Any("login_log", l))
- }
- return nil
-}
-
-func (b *userBiz) login(ctx context.Context, req *form.Login) error {
- user, err := b.database.User().GetByEmail(ctx, req.Email)
- if err != nil {
- return err
- }
-
- err = crypto.BcryptComparePassword(user.HashedPassword, req.Password+user.Salt)
- if err != nil {
- return errors.New("账号或密码错误")
- }
-
- user.Role, err = b.database.Role().Get(ctx, user.RoleID)
- if err != nil {
- return err
- }
- if user.Role == nil || user.Role.ID == 0 {
- return errors.New("账号没有配置角色, 请联系管理员")
- }
-
- // 登陆成功
- err = b.loginSuccess(ctx, user, req)
- if err != nil {
- return err
- }
-
- return nil
-}
-
-func (b *userBiz) loginSuccess(ctx context.Context, user *systemmodel.User, req *form.Login) error {
- auth := dto.AuthorizeUser{
- ID: user.ID,
- Uuid: user.Uuid,
- Email: user.Email,
- Username: user.Username,
- RoleID: user.Role.ID,
- RoleName: user.Role.Name,
- OS: req.Os,
- IP: req.Ip,
- Browser: req.Browser,
- }
-
- gob, err := json.Marshal(auth)
- if err != nil {
- return err
- }
-
- b.session.Put(ctx, know.StoreName, gob)
- return nil
-}
diff --git a/internal/erpserver/handler/budget/budget.go b/internal/erpserver/handler/budget/budget.go
deleted file mode 100644
index 78057e9..0000000
--- a/internal/erpserver/handler/budget/budget.go
+++ /dev/null
@@ -1,274 +0,0 @@
-package budget
-
-import (
- "errors"
- "net/http"
- "strconv"
- "strings"
- "time"
-
- "management/internal/db/model/form"
- db "management/internal/db/sqlc"
- "management/internal/erpserver/biz"
- "management/internal/pkg/convertor"
- "management/internal/pkg/know"
- "management/internal/pkg/middleware"
- "management/internal/pkg/tpl"
- "management/internal/pkg/tpl/html"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type BudgetHandler interface {
- List(w http.ResponseWriter, r *http.Request)
- Add(w http.ResponseWriter, r *http.Request)
- Edit(w http.ResponseWriter, r *http.Request)
- Save(w http.ResponseWriter, r *http.Request)
- Data(w http.ResponseWriter, r *http.Request)
-}
-
-type budgetHandler struct {
- render tpl.Renderer
- biz biz.IBiz
- mi middleware.Middleware
-}
-
-var _ BudgetHandler = (*budgetHandler)(nil)
-
-func NewBudgetHandler(render tpl.Renderer, biz biz.IBiz, mi middleware.Middleware) *budgetHandler {
- return &budgetHandler{
- render: render,
- biz: biz,
- mi: mi,
- }
-}
-
-func (h *budgetHandler) List(w http.ResponseWriter, r *http.Request) {
- switch r.Method {
- case http.MethodGet:
- ctx := r.Context()
- pp, _ := h.biz.ProjectV1().ListHtml(ctx)
- cc, _ := h.biz.SystemV1().CategoryBiz().ListHtmlByLetter(ctx, know.BudgetCategory)
- h.render.HTML(w, r, "budget/list.tmpl", map[string]any{
- "Statuses": html.NewSelectControls(html.Statuses, "0"),
- "Projects": html.NewSelectControls(pp, "0"),
- "Categories": html.NewSelectControls(cc, "0"),
- })
- case http.MethodPost:
- ctx := r.Context()
- project := convertor.ConvertInt[int64](r.PostFormValue("project"), 9999)
- if project == 0 {
- project = 9999
- }
-
- budgetType := convertor.ConvertInt[int32](r.PostFormValue("budgetType"), 9999)
- if budgetType == 0 {
- budgetType = 9999
- }
-
- category := convertor.ConvertInt[int32](r.PostFormValue("category"), 9999)
- if category == 0 {
- category = 9999
- }
-
- title := strings.TrimSpace(r.PostFormValue("title"))
- var search string
- if len(title) > 0 {
- search = "%" + title + "%"
- if strings.HasSuffix(title, ":") {
- search = title[:len(title)-1] + "%"
- }
- }
- arg := &db.ListBudgetConditionParam{
- ProjectID: project,
- BudgetType: budgetType,
- Category: category,
- IsTitle: len(search) > 0,
- Title: search,
- Status: convertor.ConvertInt[int16](r.PostFormValue("status"), 9999),
- PageID: convertor.ConvertInt[int32](r.PostFormValue("page"), 1),
- PageSize: convertor.ConvertInt[int32](r.PostFormValue("rows"), 10),
- }
- arg.TimeBegin, arg.TimeEnd = convertor.DefaultStartTimeAndEndTime(r.PostFormValue("timeBegin"), r.PostFormValue("timeEnd"))
- res, total, err := h.biz.BudgetV1().List(ctx, arg)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- data := tpl.ResponseList{
- Code: 0,
- Message: "ok",
- Count: total,
- Data: res,
- }
- h.render.JSON(w, data)
- default:
- http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
- }
-}
-
-func (h *budgetHandler) Add(w http.ResponseWriter, r *http.Request) {
- h.render.HTML(w, r, "budget/edit.tmpl", map[string]any{
- "Item": &form.BudgetForm{
- BudgetType: 1,
- },
- "Statuses": html.NewSelectControls(html.Statuses, "0"),
- })
-}
-
-func (h *budgetHandler) Edit(w http.ResponseWriter, r *http.Request) {
- vars := r.URL.Query()
- id := convertor.QueryInt[int64](vars, "id", 0)
- budget := &form.BudgetForm{}
- ctx := r.Context()
- if id > 0 {
- if cus, err := h.biz.BudgetV1().Get(ctx, id); err == nil {
- budget = budget.ToForm(cus)
- if u, err := h.biz.SystemV1().UserBiz().Get(ctx, cus.CreatedUserID); err == nil {
- budget.CreatedName = u.Username
- }
- if u, err := h.biz.SystemV1().UserBiz().Get(ctx, cus.UpdatedUserID); err == nil {
- budget.UpdatedName = u.Username
- }
- }
- }
- h.render.HTML(w, r, "budget/edit.tmpl", map[string]any{
- "Item": budget,
- "Statuses": html.NewSelectControls(html.Statuses, strconv.Itoa(int(budget.Status))),
- })
-}
-
-func (h *budgetHandler) Save(w http.ResponseWriter, r *http.Request) {
- ctx := r.Context()
- data, err := validForm(r)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- authUser := h.mi.AuthUser(ctx)
- if data.ID > 0 {
- arg := &db.UpdateBudgetParams{
- ID: data.ID,
- ProjectID: pgtype.Int8{
- Int64: data.ProjectID,
- Valid: true,
- },
- Name: pgtype.Text{
- String: data.Name,
- Valid: true,
- },
- BudgetType: pgtype.Int4{
- Int32: data.BudgetType,
- Valid: true,
- },
- Category: pgtype.Int4{
- Int32: data.Category,
- Valid: true,
- },
- StartAt: pgtype.Timestamptz{
- Time: data.StartAt,
- Valid: true,
- },
- EndAt: pgtype.Timestamptz{
- Time: data.EndAt,
- Valid: true,
- },
- Amount: data.AmountF,
- UsedAmount: data.UsedAmountF,
- RemainingAmount: data.RemainingAmountF,
- Remark: pgtype.Text{
- String: data.Remark,
- Valid: true,
- },
- Status: pgtype.Int2{
- Int16: data.Status,
- Valid: true,
- },
- UpdatedUserID: pgtype.Int4{
- Int32: authUser.ID,
- Valid: true,
- },
- }
- _, err := h.biz.BudgetV1().Update(ctx, arg)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
- h.render.JSONOK(w, "更新成功")
- } else {
- arg := &db.CreateBudgetParams{
- ProjectID: data.ProjectID,
- Name: data.Name,
- BudgetType: data.BudgetType,
- Category: data.Category,
- StartAt: data.StartAt,
- EndAt: data.EndAt,
- Amount: data.AmountF,
- UsedAmount: data.UsedAmountF,
- RemainingAmount: data.RemainingAmountF,
- Remark: data.Remark,
- CreatedUserID: authUser.ID,
- }
- _, err := h.biz.BudgetV1().Create(ctx, arg)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
- h.render.JSONOK(w, "添加成功")
- }
-}
-
-func (h *budgetHandler) Data(w http.ResponseWriter, r *http.Request) {}
-
-func validForm(r *http.Request) (form.BudgetForm, error) {
- var err error
- data := form.BudgetForm{}
-
- data.ID = convertor.ConvertInt[int64](r.PostFormValue("ID"), 0)
- data.ProjectID, err = strconv.ParseInt(r.PostFormValue("ProjectID"), 10, 64)
- if err != nil || data.ProjectID == 0 {
- return data, errors.New("项目不能为空")
- }
-
- data.Name = r.PostFormValue("Name")
- if len(data.Name) == 0 {
- return data, errors.New("预算名称不能为空")
- }
-
- budgetType, err := strconv.ParseInt(r.PostFormValue("BudgetType"), 10, 32)
- if err != nil {
- return data, errors.New("预算类型不能为空")
- }
- data.BudgetType = int32(budgetType)
-
- category, err := strconv.ParseInt(r.PostFormValue("Category"), 10, 32)
- if err != nil {
- return data, errors.New("预算类别不能为空")
- }
- data.Category = int32(category)
-
- data.StartAt, err = time.ParseInLocation("2006-01-02", r.PostFormValue("StartAt"), time.Local)
- if err != nil {
- return data, errors.New("开始时间格式错误")
- }
- data.EndAt, err = time.ParseInLocation("2006-01-02", r.PostFormValue("EndAt"), time.Local)
- if err != nil {
- return data, errors.New("结束时间格式错误")
- }
-
- if err := data.AmountF.Scan(r.PostFormValue("Amount")); err != nil {
- return data, errors.New("预算金额格式错误")
- }
- if err := data.UsedAmountF.Scan(r.PostFormValue("UsedAmount")); err != nil {
- return data, errors.New("已支付金额格式错误")
- }
- if err := data.RemainingAmountF.Scan(r.PostFormValue("RemainingAmount")); err != nil {
- return data, errors.New("剩余金额格式错误")
- }
-
- data.Remark = r.PostFormValue("Remark")
- data.Status = convertor.ConvertInt[int16](r.PostFormValue("Status"), 9999)
- return data, nil
-}
diff --git a/internal/erpserver/handler/customer/customer.go b/internal/erpserver/handler/customer/customer.go
deleted file mode 100644
index 7935ee0..0000000
--- a/internal/erpserver/handler/customer/customer.go
+++ /dev/null
@@ -1,209 +0,0 @@
-package customer
-
-import (
- "net/http"
- "strconv"
- "strings"
-
- "management/internal/db/model/form"
- db "management/internal/db/sqlc"
- "management/internal/erpserver/biz"
- "management/internal/pkg/convertor"
- "management/internal/pkg/know"
- "management/internal/pkg/middleware"
- "management/internal/pkg/snowflake"
- "management/internal/pkg/tpl"
- "management/internal/pkg/tpl/html"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type CustomerHandler interface {
- List(w http.ResponseWriter, r *http.Request)
- Add(w http.ResponseWriter, r *http.Request)
- Edit(w http.ResponseWriter, r *http.Request)
- Save(w http.ResponseWriter, r *http.Request)
-}
-
-type customerHandler struct {
- render tpl.Renderer
- biz biz.IBiz
- mi middleware.Middleware
-}
-
-var _ CustomerHandler = (*customerHandler)(nil)
-
-func NewCustomerHandler(render tpl.Renderer, biz biz.IBiz, mi middleware.Middleware) *customerHandler {
- return &customerHandler{
- render: render,
- biz: biz,
- mi: mi,
- }
-}
-
-func (h *customerHandler) List(w http.ResponseWriter, r *http.Request) {
- switch r.Method {
- case http.MethodGet:
- ctx := r.Context()
- cc, _ := h.biz.SystemV1().CategoryBiz().ListHtmlByLetter(ctx, know.CustomerCategory)
- ss, _ := h.biz.SystemV1().CategoryBiz().ListHtmlByLetter(ctx, know.CustomerSource)
- h.render.HTML(w, r, "customer/list.tmpl", map[string]any{
- "Statuses": html.NewSelectControls(html.Statuses, "0"),
- "Categories": html.NewSelectControls(cc, "0"),
- "Sources": html.NewSelectControls(ss, "0"),
- })
- case http.MethodPost:
- ctx := r.Context()
- category := convertor.ConvertInt[int32](r.PostFormValue("category"), 9999)
- if category == 0 {
- category = 9999
- }
- source := convertor.ConvertInt[int32](r.PostFormValue("source"), 9999)
- if source == 0 {
- source = 9999
- }
-
- title := strings.TrimSpace(r.PostFormValue("title"))
- var search string
- if len(title) > 0 {
- search = "%" + title + "%"
- if strings.HasSuffix(title, ":") {
- search = title[:len(title)-1] + "%"
- }
- }
- arg := &db.ListCustomerConditionParam{
- IsTitle: len(search) > 0,
- Title: search,
- Status: convertor.ConvertInt[int16](r.PostFormValue("status"), 9999),
- Category: category,
- Source: source,
- PageID: convertor.ConvertInt[int32](r.PostFormValue("page"), 1),
- PageSize: convertor.ConvertInt[int32](r.PostFormValue("rows"), 10),
- }
- arg.TimeBegin, arg.TimeEnd = convertor.DefaultStartTimeAndEndTime(r.PostFormValue("timeBegin"), r.PostFormValue("timeEnd"))
- res, total, err := h.biz.CustomerV1().List(ctx, arg)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- data := tpl.ResponseList{
- Code: 0,
- Message: "ok",
- Count: total,
- Data: res,
- }
- h.render.JSON(w, data)
- default:
- http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
- }
-}
-
-func (h *customerHandler) Add(w http.ResponseWriter, r *http.Request) {
- ctx := r.Context()
- cc, _ := h.biz.SystemV1().CategoryBiz().ListHtmlByLetter(ctx, know.CustomerCategory)
- ss, _ := h.biz.SystemV1().CategoryBiz().ListHtmlByLetter(ctx, know.CustomerSource)
- h.render.HTML(w, r, "customer/edit.tmpl", map[string]any{
- "Item": &form.CustomerForm{},
- "Statuses": html.NewSelectControls(html.Statuses, "0"),
- "Categories": html.NewSelectControls(cc, "0"),
- "Sources": html.NewSelectControls(ss, "0"),
- })
-}
-
-func (h *customerHandler) Edit(w http.ResponseWriter, r *http.Request) {
- vars := r.URL.Query()
- id := convertor.ConvertInt[int64](vars.Get("id"), 0)
- customer := &form.CustomerForm{}
- ctx := r.Context()
- if id > 0 {
- if cus, err := h.biz.CustomerV1().Get(ctx, id); err == nil {
- customer = customer.ToForm(cus)
- if u, err := h.biz.SystemV1().UserBiz().Get(ctx, cus.CreatedBy); err == nil {
- customer.CreatedBy = u.Username
- }
- if u, err := h.biz.SystemV1().UserBiz().Get(ctx, cus.UpdatedBy); err == nil {
- customer.UpdatedBy = u.Username
- }
- }
- }
- cc, _ := h.biz.SystemV1().CategoryBiz().ListHtmlByLetter(ctx, know.CustomerCategory)
- ss, _ := h.biz.SystemV1().CategoryBiz().ListHtmlByLetter(ctx, know.CustomerSource)
- h.render.HTML(w, r, "customer/edit.tmpl", map[string]any{
- "Item": customer,
- "Statuses": html.NewSelectControls(html.Statuses, strconv.Itoa(int(customer.Status))),
- "Categories": html.NewSelectControls(cc, strconv.Itoa(int(customer.Category))),
- "Sources": html.NewSelectControls(ss, strconv.Itoa(int(customer.Source))),
- })
-}
-
-func (h *customerHandler) Save(w http.ResponseWriter, r *http.Request) {
- data := &form.CustomerForm{}
- if err := form.BindForm(r, data); err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- ctx := r.Context()
- authUser := h.mi.AuthUser(ctx)
- if data.ID > 0 {
- arg := &db.UpdateCustomerParams{
- ID: data.ID,
- Name: pgtype.Text{
- String: data.Name,
- Valid: true,
- },
- Category: pgtype.Int4{
- Int32: data.Category,
- Valid: true,
- },
- Source: pgtype.Int4{
- Int32: data.Source,
- Valid: true,
- },
- Address: pgtype.Text{
- String: data.Address,
- Valid: true,
- },
- ContactName: pgtype.Text{
- String: data.ContactName,
- Valid: true,
- },
- ContactPhone: pgtype.Text{
- String: data.ContactPhone,
- Valid: true,
- },
- Status: pgtype.Int2{
- Int16: data.Status,
- Valid: true,
- },
- UpdatedBy: pgtype.Int4{
- Int32: authUser.ID,
- Valid: true,
- },
- }
- _, err := h.biz.CustomerV1().Update(ctx, arg)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
- h.render.JSONOK(w, "更新成功")
- } else {
- arg := &db.CreateCustomerParams{
- ID: snowflake.GetId(),
- Name: data.Name,
- Category: data.Category,
- Source: data.Source,
- Address: data.Address,
- ContactName: data.ContactName,
- ContactPhone: data.ContactPhone,
- CreatedBy: authUser.ID,
- }
- _, err := h.biz.CustomerV1().Create(ctx, arg)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
- h.render.JSONOK(w, "添加成功")
- }
-}
diff --git a/internal/erpserver/handler/expense/expense.go b/internal/erpserver/handler/expense/expense.go
deleted file mode 100644
index 795bdcc..0000000
--- a/internal/erpserver/handler/expense/expense.go
+++ /dev/null
@@ -1,231 +0,0 @@
-package expense
-
-import (
- "errors"
- "net/http"
- "strconv"
- "strings"
- "time"
-
- "management/internal/db/model/form"
- db "management/internal/db/sqlc"
- "management/internal/erpserver/biz"
- "management/internal/pkg/convertor"
- "management/internal/pkg/know"
- "management/internal/pkg/middleware"
- "management/internal/pkg/tpl"
- "management/internal/pkg/tpl/html"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type ExpenseHandler interface {
- List(w http.ResponseWriter, r *http.Request)
- Add(w http.ResponseWriter, r *http.Request)
- Edit(w http.ResponseWriter, r *http.Request)
- Save(w http.ResponseWriter, r *http.Request)
-}
-
-type expenseHandler struct {
- render tpl.Renderer
- biz biz.IBiz
- mi middleware.Middleware
-}
-
-var _ ExpenseHandler = (*expenseHandler)(nil)
-
-func NewExpenseHandler(render tpl.Renderer, biz biz.IBiz, mi middleware.Middleware) *expenseHandler {
- return &expenseHandler{
- render: render,
- biz: biz,
- mi: mi,
- }
-}
-
-func (h *expenseHandler) List(w http.ResponseWriter, r *http.Request) {
- switch r.Method {
- case http.MethodGet:
- ctx := r.Context()
- pp, _ := h.biz.ProjectV1().ListHtml(ctx)
- cc, _ := h.biz.SystemV1().CategoryBiz().ListHtmlByLetter(ctx, know.ExpenseCategory)
- h.render.HTML(w, r, "expense/list.tmpl", map[string]any{
- "Statuses": html.NewSelectControls(html.Statuses, "0"),
- "Projects": html.NewSelectControls(pp, "0"),
- "Categories": html.NewSelectControls(cc, "0"),
- })
- case http.MethodPost:
- ctx := r.Context()
- project := convertor.ConvertInt[int64](r.PostFormValue("project"), 9999)
- if project == 0 {
- project = 9999
- }
- budget := convertor.ConvertInt[int64](r.PostFormValue("budget"), 9999)
- if budget == 0 {
- budget = 9999
- }
- category := convertor.ConvertInt[int32](r.PostFormValue("category"), 9999)
- if category == 0 {
- category = 9999
- }
-
- title := strings.TrimSpace(r.PostFormValue("title"))
- var search string
- if len(title) > 0 {
- search = "%" + title + "%"
- if strings.HasSuffix(title, ":") {
- search = title[:len(title)-1] + "%"
- }
- }
- arg := &db.ListExpenseConditionParam{
- ProjectID: project,
- BudgetID: budget,
- ExpenseType: category,
- IsTitle: len(search) > 0,
- Title: search,
- Status: convertor.ConvertInt[int16](r.PostFormValue("status"), 9999),
- PageID: convertor.ConvertInt[int32](r.PostFormValue("page"), 1),
- PageSize: convertor.ConvertInt[int32](r.PostFormValue("rows"), 10),
- }
- arg.TimeBegin, arg.TimeEnd = convertor.DefaultStartTimeAndEndTime(r.PostFormValue("timeBegin"), r.PostFormValue("timeEnd"))
- res, total, err := h.biz.ExpenseV1().List(ctx, arg)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- data := tpl.ResponseList{
- Code: 0,
- Message: "ok",
- Count: total,
- Data: res,
- }
- h.render.JSON(w, data)
- default:
- http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
- }
-}
-
-func (h *expenseHandler) Add(w http.ResponseWriter, r *http.Request) {
- h.render.HTML(w, r, "expense/edit.tmpl", map[string]any{
- "Item": &form.ExpenseForm{},
- "Statuses": html.NewSelectControls(html.Statuses, "0"),
- })
-}
-
-func (h *expenseHandler) Edit(w http.ResponseWriter, r *http.Request) {
- vars := r.URL.Query()
- id := convertor.QueryInt[int64](vars, "id", 0)
- expense := &form.ExpenseForm{}
- ctx := r.Context()
- if id > 0 {
- if cus, err := h.biz.ExpenseV1().Get(ctx, id); err == nil {
- expense = expense.ToForm(cus)
- if u, err := h.biz.SystemV1().UserBiz().Get(ctx, cus.CreatedUserID); err == nil {
- expense.CreatedName = u.Username
- }
- if u, err := h.biz.SystemV1().UserBiz().Get(ctx, cus.UpdatedUserID); err == nil {
- expense.UpdatedName = u.Username
- }
- }
- }
- h.render.HTML(w, r, "expense/edit.tmpl", map[string]any{
- "Item": expense,
- "Statuses": html.NewSelectControls(html.Statuses, strconv.Itoa(int(expense.Status))),
- })
-}
-
-func (h *expenseHandler) Save(w http.ResponseWriter, r *http.Request) {
- data, err := validForm(r)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- ctx := r.Context()
- authUser := h.mi.AuthUser(ctx)
- if data.ID > 0 {
- arg := &db.UpdateExpenseParams{
- ID: data.ID,
- ProjectID: pgtype.Int8{
- Int64: data.ProjectID,
- Valid: true,
- },
- BudgetID: pgtype.Int8{
- Int64: data.BudgetID,
- Valid: true,
- },
- Amount: data.AmountF,
- ExpensesAt: pgtype.Timestamptz{
- Time: data.ExpensesAt,
- Valid: true,
- },
- ExpensesType: pgtype.Int4{
- Int32: data.ExpensesType,
- Valid: true,
- },
- Remark: pgtype.Text{
- String: data.Remark,
- Valid: true,
- },
- Status: pgtype.Int2{
- Int16: data.Status,
- Valid: true,
- },
- UpdatedUserID: pgtype.Int4{
- Int32: authUser.ID,
- Valid: true,
- },
- }
- _, err := h.biz.ExpenseV1().Update(ctx, arg)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
- h.render.JSONOK(w, "更新成功")
- } else {
- arg := &db.CreateExpenseParams{
- ProjectID: data.ProjectID,
- BudgetID: data.BudgetID,
- Amount: data.AmountF,
- ExpensesAt: data.ExpensesAt,
- ExpensesType: data.ExpensesType,
- Remark: data.Remark,
- Status: data.Status,
- CreatedUserID: authUser.ID,
- }
- _, err := h.biz.ExpenseV1().Create(ctx, arg)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
- h.render.JSONOK(w, "添加成功")
- }
-}
-
-func validForm(r *http.Request) (form.ExpenseForm, error) {
- var err error
- data := form.ExpenseForm{}
-
- data.ID = convertor.ConvertInt[int64](r.PostFormValue("ID"), 0)
- data.ProjectID, err = strconv.ParseInt(r.PostFormValue("ProjectID"), 10, 64)
- if err != nil || data.ProjectID == 0 {
- return data, errors.New("项目不能为空")
- }
- data.BudgetID, err = strconv.ParseInt(r.PostFormValue("BudgetID"), 10, 64)
-
- if err := data.AmountF.Scan(r.PostFormValue("Amount")); err != nil {
- return data, errors.New("报销金额格式错误")
- }
- data.ExpensesAt, err = time.ParseInLocation("2006-01-02", r.PostFormValue("ExpensesAt"), time.Local)
- if err != nil {
- return data, errors.New("报销时间格式错误")
- }
- expensesType, err := strconv.ParseInt(r.PostFormValue("ExpensesType"), 10, 64)
- if err != nil || expensesType == 0 {
- return data, errors.New("报销类型不能为空")
- }
- data.ExpensesType = int32(expensesType)
-
- data.Status = convertor.ConvertInt[int16](r.PostFormValue("Status"), 9999)
- return data, nil
-}
diff --git a/internal/erpserver/handler/income/income.go b/internal/erpserver/handler/income/income.go
deleted file mode 100644
index 2e2dec1..0000000
--- a/internal/erpserver/handler/income/income.go
+++ /dev/null
@@ -1,249 +0,0 @@
-package income
-
-import (
- "errors"
- "net/http"
- "strconv"
- "strings"
- "time"
-
- "management/internal/db/model/form"
- db "management/internal/db/sqlc"
- "management/internal/erpserver/biz"
- "management/internal/pkg/convertor"
- "management/internal/pkg/know"
- "management/internal/pkg/middleware"
- "management/internal/pkg/tpl"
- "management/internal/pkg/tpl/html"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type IncomeHandler interface {
- List(w http.ResponseWriter, r *http.Request)
- Add(w http.ResponseWriter, r *http.Request)
- Edit(w http.ResponseWriter, r *http.Request)
- Save(w http.ResponseWriter, r *http.Request)
-}
-
-type incomeHandler struct {
- render tpl.Renderer
- biz biz.IBiz
- mi middleware.Middleware
-}
-
-var _ IncomeHandler = (*incomeHandler)(nil)
-
-func NewIncomeHandler(render tpl.Renderer, biz biz.IBiz, mi middleware.Middleware) *incomeHandler {
- return &incomeHandler{
- render: render,
- biz: biz,
- mi: mi,
- }
-}
-
-func (h *incomeHandler) List(w http.ResponseWriter, r *http.Request) {
- switch r.Method {
- case http.MethodGet:
- ctx := r.Context()
- pp, _ := h.biz.ProjectV1().ListHtml(ctx)
- cc, _ := h.biz.SystemV1().CategoryBiz().ListHtmlByLetter(ctx, know.IncomeCategory)
- h.render.HTML(w, r, "income/list.tmpl", map[string]any{
- "Statuses": html.NewSelectControls(html.Statuses, "0"),
- "Projects": html.NewSelectControls(pp, "0"),
- "Categories": html.NewSelectControls(cc, "0"),
- })
- case http.MethodPost:
- ctx := r.Context()
- project := convertor.ConvertInt[int64](r.PostFormValue("project"), 9999)
- if project == 0 {
- project = 9999
- }
- budget := convertor.ConvertInt[int64](r.PostFormValue("budget"), 9999)
- if budget == 0 {
- budget = 9999
- }
- category := convertor.ConvertInt[int32](r.PostFormValue("category"), 9999)
- if category == 0 {
- category = 9999
- }
-
- title := strings.TrimSpace(r.PostFormValue("title"))
- var search string
- if len(title) > 0 {
- search = "%" + title + "%"
- if strings.HasSuffix(title, ":") {
- search = title[:len(title)-1] + "%"
- }
- }
- arg := &db.ListIncomeConditionParam{
- ProjectID: project,
- BudgetID: budget,
- IncomeType: category,
- IsTitle: len(search) > 0,
- Title: search,
- Status: convertor.ConvertInt[int16](r.PostFormValue("status"), 9999),
- PageID: convertor.ConvertInt[int32](r.PostFormValue("page"), 1),
- PageSize: convertor.ConvertInt[int32](r.PostFormValue("rows"), 10),
- }
- arg.TimeBegin, arg.TimeEnd = convertor.DefaultStartTimeAndEndTime(r.PostFormValue("timeBegin"), r.PostFormValue("timeEnd"))
- res, total, err := h.biz.IncomeV1().List(ctx, arg)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- data := tpl.ResponseList{
- Code: 0,
- Message: "ok",
- Count: total,
- Data: res,
- }
- h.render.JSON(w, data)
- default:
- http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
- }
-}
-
-func (h *incomeHandler) Add(w http.ResponseWriter, r *http.Request) {
- h.render.HTML(w, r, "income/edit.tmpl", map[string]any{
- "Item": &form.IncomeForm{},
- "Statuses": html.NewSelectControls(html.Statuses, "0"),
- })
-}
-
-func (h *incomeHandler) Edit(w http.ResponseWriter, r *http.Request) {
- vars := r.URL.Query()
- id := convertor.ConvertInt[int64](vars.Get("id"), 0)
- income := &form.IncomeForm{}
- ctx := r.Context()
- if id > 0 {
- if cus, err := h.biz.IncomeV1().Get(ctx, id); err == nil {
- income = income.ToForm(cus)
- if u, err := h.biz.SystemV1().UserBiz().Get(ctx, cus.CreatedUserID); err == nil {
- income.CreatedName = u.Username
- }
- if u, err := h.biz.SystemV1().UserBiz().Get(ctx, cus.UpdatedUserID); err == nil {
- income.UpdatedName = u.Username
- }
- }
- }
- h.render.HTML(w, r, "income/edit.tmpl", map[string]any{
- "Item": income,
- "Statuses": html.NewSelectControls(html.Statuses, strconv.Itoa(int(income.Status))),
- })
-}
-
-func (h *incomeHandler) Save(w http.ResponseWriter, r *http.Request) {
- data, err := validForm(r)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- ctx := r.Context()
- authUser := h.mi.AuthUser(ctx)
- if data.ID > 0 {
- arg := &db.UpdateIncomeParams{
- ID: data.ID,
- ProjectID: pgtype.Int8{
- Int64: data.ProjectID,
- Valid: true,
- },
- BudgetID: pgtype.Int8{
- Int64: data.BudgetID,
- Valid: true,
- },
- Amount: data.AmountF,
- IncomeAt: pgtype.Timestamptz{
- Time: data.IncomeAt,
- Valid: true,
- },
- IncomeType: pgtype.Int4{
- Int32: data.IncomeType,
- Valid: true,
- },
- IncomeBank: pgtype.Int4{
- Int32: data.IncomeBank,
- Valid: true,
- },
- Remark: pgtype.Text{
- String: data.Remark,
- Valid: true,
- },
- Status: pgtype.Int2{
- Int16: data.Status,
- Valid: true,
- },
- UpdatedUserID: pgtype.Int4{
- Int32: authUser.ID,
- Valid: true,
- },
- }
- _, err := h.biz.IncomeV1().Update(ctx, arg)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
- h.render.JSONOK(w, "更新成功")
- } else {
- arg := &db.CreateIncomeParams{
- ProjectID: data.ProjectID,
- BudgetID: data.BudgetID,
- Amount: data.AmountF,
- IncomeAt: data.IncomeAt,
- IncomeType: data.IncomeType,
- IncomeBank: data.IncomeBank,
- Remark: data.Remark,
- Status: data.Status,
- CreatedUserID: authUser.ID,
- }
- _, err := h.biz.IncomeV1().Create(ctx, arg)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
- h.render.JSONOK(w, "添加成功")
- }
-}
-
-func validForm(r *http.Request) (form.IncomeForm, error) {
- var err error
- data := form.IncomeForm{}
- data.ID = convertor.ConvertInt[int64](r.PostFormValue("ID"), 0)
-
- data.ProjectID, err = strconv.ParseInt(r.PostFormValue("ProjectID"), 10, 64)
- if err != nil || data.ProjectID == 0 {
- return data, errors.New("项目不能为空")
- }
-
- data.BudgetID, err = strconv.ParseInt(r.PostFormValue("BudgetID"), 10, 64)
- if err != nil {
- data.BudgetID = 0
- }
-
- if err := data.AmountF.Scan(r.PostFormValue("Amount")); err != nil {
- return data, errors.New("报销金额格式错误")
- }
-
- data.IncomeAt, err = time.ParseInLocation("2006-01-02", r.PostFormValue("IncomeAt"), time.Local)
- if err != nil {
- return data, errors.New("回款时间格式错误")
- }
-
- incomeType, err := strconv.ParseInt(r.PostFormValue("IncomeType"), 10, 64)
- if err != nil {
- return data, errors.New("收入类型数据错误")
- }
- data.IncomeType = int32(incomeType)
-
- incomeBank, err := strconv.ParseInt(r.PostFormValue("IncomeBank"), 10, 64)
- if err != nil {
- return data, errors.New("收入银行数据错误")
- }
- data.IncomeBank = int32(incomeBank)
-
- data.Remark = r.PostFormValue("Remark")
- data.Status = convertor.ConvertInt[int16](r.PostFormValue("Status"), 9999)
- return data, nil
-}
diff --git a/internal/erpserver/handler/project/dashboard.go b/internal/erpserver/handler/project/dashboard.go
deleted file mode 100644
index ae4bd12..0000000
--- a/internal/erpserver/handler/project/dashboard.go
+++ /dev/null
@@ -1,369 +0,0 @@
-package project
-
-import (
- "context"
- "fmt"
- "net/http"
-
- "management/internal/db/model/view"
- "management/internal/pkg/convertor"
- "management/internal/pkg/tpl"
-)
-
-func (h *projectHandler) Dashboard(w http.ResponseWriter, r *http.Request) {
- switch r.Method {
- case http.MethodGet:
- pp, _ := h.biz.ProjectV1().ListHtml(r.Context())
- h.render.HTML(w, r, "project/dashboard.tmpl", map[string]any{
- "Projects": pp,
- })
- case http.MethodPost:
- ctx := r.Context()
- t := r.PostFormValue("type")
- if t == "project" {
- var projectIncome float64
- var projectExpense float64
- projectID := convertor.ConvertInt[int64](r.PostFormValue("projectID"), 0)
- if projectID == 0 {
- si, _ := h.biz.IncomeV1().Sum(ctx)
- projectIncome = convertor.NumericToFloat64(si)
- se, _ := h.biz.ExpenseV1().Sum(ctx)
- projectExpense = convertor.NumericToFloat64(se)
- } else {
- pi, _ := h.biz.IncomeV1().SumByProjectID(ctx, projectID)
- projectIncome = convertor.NumericToFloat64(pi)
- pe, _ := h.biz.ExpenseV1().SumByProjectID(ctx, projectID)
- projectExpense = convertor.NumericToFloat64(pe)
- }
-
- projectProfit := projectIncome - projectExpense
- var projectProfitRate float64 = 0
- if projectExpense > 0 {
- projectProfitRate = projectProfit / projectExpense
- }
-
- res := &view.DashboardProject{
- ProjectIncome: projectIncome,
- ProjectExpense: projectExpense,
- ProjectProfit: projectProfit,
- ProjectProfitRate: fmt.Sprintf("%0.2f%%", projectProfitRate*100),
- IncomeExpenseEcharts: h.incomeExpenseEcharts(ctx, projectID),
- IncomeEcharts: h.incomeEcharts(ctx, projectID),
- ExpenseEcharts: h.expenseEcharts(ctx, projectID),
- }
- h.render.JSON(w, tpl.Response{Success: true, Message: "ok", Data: res})
- return
- } else if t == "budget" {
- }
- h.render.JSONERR(w, "failed to valid type")
- default:
- http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
- }
-}
-
-func (h *projectHandler) incomeExpenseEcharts(ctx context.Context, projectId int64) view.EchartsOption {
- var name []string
- var income []float64
- var expense []float64
-
- if projectId == 0 {
- rows, err := h.biz.ProjectV1().Statistics(ctx)
- if err != nil || len(rows) == 0 {
- return view.EchartsOption{}
- }
-
- for _, row := range rows {
- name = append(name, row.Name)
- income = append(income, convertor.NumericToFloat64(row.Income))
- expense = append(expense, convertor.NumericToFloat64(row.Expense))
- }
- } else {
- row, err := h.biz.ProjectV1().StatisticsItem(ctx, projectId)
- if err != nil || row == nil {
- return view.EchartsOption{}
- }
- name = append(name, row.Name)
- income = append(income, convertor.NumericToFloat64(row.Income))
- expense = append(expense, convertor.NumericToFloat64(row.Expense))
- }
-
- return view.EchartsOption{
- Title: view.Title{
- Text: "项目收支情况",
- Left: "center",
- Top: 2,
- FontSize: 15,
- TextStyle: view.TextStyle{
- Color: "#666666",
- FontWeight: "normal",
- },
- },
- Color: []string{"#fed46b", "#2194ff"},
- ToolTip: view.ToolTip{
- Trigger: "axis",
- AxisPointer: view.AxisPointer{
- Type: "shadow",
- },
- },
- Grid: view.Grid{
- Left: "3%",
- Right: "4%",
- Bottom: "10%",
- ContainLabel: true,
- },
- Legend: view.Legend{
- Left: "center",
- Top: "bottom",
- Data: []string{"支出金额", "收入金额"},
- },
- XAxis: []view.XAxis{
- {
- Type: "category",
- Data: name,
- AxisTick: view.AxisTick{
- AlignWithLabel: true,
- },
- },
- },
- YAxis: []view.YAxis{
- {
- Type: "value",
- Name: "单位:元",
- },
- },
- BarMaxWidth: "30",
- Label: view.Label{
- Show: true,
- Position: "top",
- },
- Series: []view.Series{
- {
- Name: "支出金额",
- Type: "bar",
- Data: expense,
- ItemStyle: view.ItemStyle{
- Normal: view.Normal{
- Color: "#f89588",
- },
- },
- },
- {
- Name: "收入金额",
- Type: "bar",
- Data: income,
- ItemStyle: view.ItemStyle{
- Normal: view.Normal{
- Color: "#76da91",
- },
- },
- },
- },
- }
-}
-
-func (h *projectHandler) incomeEcharts(ctx context.Context, projectId int64) view.EchartsOption {
- var name []string
- data := []view.DataItem{}
-
- if projectId == 0 {
- rows, err := h.biz.IncomeV1().Statistics(ctx)
- if err != nil || len(rows) == 0 {
- return view.EchartsOption{}
- }
-
- for _, row := range rows {
- name = append(name, row.IncomeTypeName)
- data = append(data, view.DataItem{
- Name: row.IncomeTypeName,
- Value: convertor.NumericToFloat64(row.TotalAmount),
- })
- }
- } else {
- rows, err := h.biz.IncomeV1().StatisticsByProjectID(ctx, projectId)
- if err != nil || len(rows) == 0 {
- return view.EchartsOption{}
- }
-
- for _, row := range rows {
- name = append(name, row.IncomeTypeName)
- data = append(data, view.DataItem{
- Name: row.IncomeTypeName,
- Value: convertor.NumericToFloat64(row.TotalAmount),
- })
- }
- }
-
- return view.EchartsOption{
- Title: view.Title{
- Text: "收入分布",
- Left: "center",
- Orient: "vertical",
- FontSize: 15,
- TextStyle: view.TextStyle{
- Color: "#666666",
- FontWeight: "normal",
- },
- },
- ToolTip: view.ToolTip{
- Trigger: "item",
- },
- Legend: view.Legend{
- Left: "center",
- Top: "bottom",
- Data: name,
- },
- Color: []string{"#63b2ee", "#76da91", "#f8cb7f", "#f89588", "#7cd6cf", "#9192ab", "#7898e1", "#efa666", "#eddd86", "#9987ce", "#63b2ee", "#76da91"},
- Series: []view.Series{
- {
- Type: "pie",
- Radius: "50%",
- Data: data,
- Label: view.Label{
- Show: true,
- TextStyle: view.TextStyle{
- Color: "#666666",
- },
- Normal: view.LableNormal{
- Formatter: "{c} ({d}%)",
- TextStyle: view.TextStyle{
- Color: "#666666",
- FontWeight: "normal",
- },
- },
- },
- },
- },
- }
-}
-
-func (h *projectHandler) expenseEcharts(ctx context.Context, projectId int64) view.EchartsOption {
- var name []string
- data := []view.DataItem{}
-
- if projectId == 0 {
- rows, err := h.biz.ExpenseV1().Statistics(ctx)
- if err != nil || len(rows) == 0 {
- return view.EchartsOption{}
- }
-
- for _, row := range rows {
- name = append(name, row.ExpensesTypeName)
- data = append(data, view.DataItem{
- Name: row.ExpensesTypeName,
- Value: convertor.NumericToFloat64(row.TotalAmount),
- })
- }
- } else {
- rows, err := h.biz.ExpenseV1().StatisticsByProjectID(ctx, projectId)
- if err != nil || len(rows) == 0 {
- return view.EchartsOption{}
- }
-
- for _, row := range rows {
- name = append(name, row.ExpensesTypeName)
- data = append(data, view.DataItem{
- Name: row.ExpensesTypeName,
- Value: convertor.NumericToFloat64(row.TotalAmount),
- })
- }
- }
-
- return view.EchartsOption{
- Title: view.Title{
- Text: "支出分布",
- Left: "center",
- Orient: "vertical",
- FontSize: 15,
- TextStyle: view.TextStyle{
- Color: "#666666",
- FontWeight: "normal",
- },
- },
- ToolTip: view.ToolTip{
- Trigger: "item",
- },
- Legend: view.Legend{
- Left: "center",
- Top: "bottom",
- Data: name,
- },
- Color: []string{"#63b2ee", "#76da91", "#f8cb7f", "#f89588", "#7cd6cf", "#9192ab", "#7898e1", "#efa666", "#eddd86", "#9987ce", "#63b2ee", "#76da91"},
- Series: []view.Series{
- {
- Type: "pie",
- Radius: "50%",
- Data: data,
- Label: view.Label{
- Show: true,
- TextStyle: view.TextStyle{
- Color: "#666666",
- },
- Normal: view.LableNormal{
- Formatter: "{c} ({d}%)",
- TextStyle: view.TextStyle{
- Color: "#666666",
- FontWeight: "normal",
- },
- },
- },
- },
- },
- }
-
- // return view.EchartsOption{
- // Title: view.Title{
- // Text: "支出分布",
- // Left: "center",
- // Top: 2,
- // FontSize: 15,
- // TextStyle: view.TextStyle{
- // Color: "#666666",
- // FontWeight: "normal",
- // },
- // },
- // Color: []string{"#fed46b", "#2194ff"},
- // ToolTip: view.ToolTip{
- // Trigger: "axis",
- // AxisPointer: view.AxisPointer{
- // Type: "shadow",
- // },
- // },
- // Grid: view.Grid{
- // Left: "3%",
- // Right: "4%",
- // Bottom: "10%",
- // ContainLabel: true,
- // },
- // XAxis: []view.XAxis{
- // {
- // Type: "category",
- // Data: name,
- // AxisTick: view.AxisTick{
- // AlignWithLabel: true,
- // },
- // },
- // },
- // YAxis: []view.YAxis{
- // {
- // Type: "value",
- // Name: "单位:元",
- // },
- // },
- // BarMaxWidth: "30",
- // Label: view.Label{
- // Show: true,
- // Position: "top",
- // },
- // Series: []view.Series{
- // {
- // Type: "bar",
- // Data: expense,
- // ItemStyle: view.ItemStyle{
- // Normal: view.Normal{
- // Color: "#f89588",
- // },
- // },
- // },
- // },
- // }
-}
diff --git a/internal/erpserver/handler/project/project.go b/internal/erpserver/handler/project/project.go
deleted file mode 100644
index d60119b..0000000
--- a/internal/erpserver/handler/project/project.go
+++ /dev/null
@@ -1,337 +0,0 @@
-package project
-
-import (
- "errors"
- "net/http"
- "strconv"
- "strings"
- "time"
-
- formDto "management/internal/db/model/form"
- db "management/internal/db/sqlc"
- "management/internal/erpserver/biz"
- "management/internal/pkg/convertor"
- "management/internal/pkg/middleware"
- "management/internal/pkg/snowflake"
- "management/internal/pkg/tpl"
- "management/internal/pkg/tpl/html"
-
- "github.com/jackc/pgx/v5/pgtype"
-)
-
-type ProjectHandler interface {
- List(w http.ResponseWriter, r *http.Request)
- Add(w http.ResponseWriter, r *http.Request)
- Edit(w http.ResponseWriter, r *http.Request)
- Save(w http.ResponseWriter, r *http.Request)
- Data(w http.ResponseWriter, r *http.Request)
- Dashboard(w http.ResponseWriter, r *http.Request)
-}
-
-type projectHandler struct {
- render tpl.Renderer
- biz biz.IBiz
- mi middleware.Middleware
-}
-
-var _ ProjectHandler = (*projectHandler)(nil)
-
-func NewProjectHandler(render tpl.Renderer, biz biz.IBiz, mi middleware.Middleware) *projectHandler {
- return &projectHandler{
- render: render,
- biz: biz,
- mi: mi,
- }
-}
-
-func (h *projectHandler) List(w http.ResponseWriter, r *http.Request) {
- switch r.Method {
- case http.MethodGet:
- h.render.HTML(w, r, "project/list.tmpl", map[string]any{
- "Statuses": html.NewSelectControls(html.ProjectStatuses, "0"),
- })
- case http.MethodPost:
- title := strings.TrimSpace(r.PostFormValue("title"))
- var search string
- if len(title) > 0 {
- search = "%" + title + "%"
- if strings.HasSuffix(title, ":") {
- search = title[:len(title)-1] + "%"
- }
- }
- arg := &db.ListProjectConditionParam{
- IsTitle: len(search) > 0,
- Title: search,
- Status: convertor.ConvertInt[int16](r.PostFormValue("status"), 9999),
- PageID: convertor.ConvertInt[int32](r.PostFormValue("page"), 1),
- PageSize: convertor.ConvertInt[int32](r.PostFormValue("rows"), 10),
- }
- arg.TimeBegin, arg.TimeEnd = convertor.DefaultStartTimeAndEndTime(r.PostFormValue("timeBegin"), r.PostFormValue("timeEnd"))
- res, total, err := h.biz.ProjectV1().List(r.Context(), arg)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- data := tpl.ResponseList{
- Code: 0,
- Message: "ok",
- Count: total,
- Data: res,
- }
- h.render.JSON(w, data)
- default:
- http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed)
- }
-}
-
-func (h *projectHandler) Add(w http.ResponseWriter, r *http.Request) {
- authUser := h.mi.AuthUser(r.Context())
- h.render.HTML(w, r, "project/edit.tmpl", map[string]any{
- "Item": &formDto.ProjectForm{
- ApplyUserID: authUser.ID,
- ProjectFiles: &formDto.ProjectFileForm{
- ProjectFileItems: []*formDto.ProjectFileItemForm{},
- },
- },
- "Statuses": html.NewSelectControls(html.ProjectStatuses, "0"),
- })
-}
-
-func (h *projectHandler) Edit(w http.ResponseWriter, r *http.Request) {
- form := &formDto.ProjectForm{}
- id := convertor.ConvertInt[int64](r.URL.Query().Get("id"), 0)
- if id > 0 {
- ctx := r.Context()
- if po, err := h.biz.ProjectV1().Get(ctx, id); err == nil {
- pfs, err := h.biz.ProjectV1().ListProjectFiles(ctx, po.ID)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
- form = form.ToForm(po, pfs)
- if form.ApplyUserID == 0 {
- authUser := h.mi.AuthUser(ctx)
- form.ApplyUserID = authUser.ID
- }
- // if c, err := db.Engine.GetCustomer(ctx, po.CustomerID); err == nil {
- // form.CustomerName = c.Name
- // }
- if u, err := h.biz.SystemV1().UserBiz().Get(ctx, po.CreatedUserID); err == nil {
- form.CreatedName = u.Username
- }
- if u, err := h.biz.SystemV1().UserBiz().Get(ctx, po.UpdatedUserID); err == nil {
- form.UpdatedName = u.Username
- }
- }
- }
- h.render.HTML(w, r, "project/edit.tmpl", map[string]any{
- "Item": form,
- "Statuses": html.NewSelectControls(html.ProjectStatuses, strconv.Itoa(int(form.Status))),
- })
-}
-
-func (h *projectHandler) Save(w http.ResponseWriter, r *http.Request) {
- ctx := r.Context()
- form, err := validForm(r)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- authUser := h.mi.AuthUser(ctx)
- if form.ID > 0 {
- p := &db.UpdateProjectParams{
- ID: form.ID,
- Name: pgtype.Text{
- String: form.Name,
- Valid: true,
- },
- StartAt: pgtype.Timestamptz{
- Time: form.StartAt,
- Valid: true,
- },
- EndAt: pgtype.Timestamptz{
- Time: form.EndAt,
- Valid: true,
- },
- CustomerID: pgtype.Int8{
- Int64: form.CustomerID,
- Valid: true,
- },
- TotalMoney: form.TotalMoneyF,
- Description: pgtype.Text{
- String: form.Description,
- Valid: true,
- },
- ApplyAt: pgtype.Timestamptz{
- Time: form.ApplyAt,
- Valid: true,
- },
- ApplyUserID: pgtype.Int4{
- Int32: form.ApplyUserID,
- Valid: true,
- },
- ManagerID: pgtype.Int4{
- Int32: form.ManagerID,
- Valid: true,
- },
- Members: pgtype.Text{
- String: form.Members,
- Valid: true,
- },
- Status: pgtype.Int2{
- Int16: form.Status,
- Valid: true,
- },
- UpdatedUserID: pgtype.Int4{
- Int32: authUser.ID,
- Valid: true,
- },
- }
- cpfs := []*db.CreateProjectFileParams{}
- for _, pfile := range form.ProjectFiles.ProjectFileItems {
- cpfs = append(cpfs, &db.CreateProjectFileParams{
- ID: snowflake.GetId(),
- Name: pfile.Name,
- Path: pfile.Path,
- ProjectID: form.ID,
- CreatedUserID: authUser.ID,
- })
- }
- err := h.biz.ProjectV1().Update(ctx, p, cpfs)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
- h.render.JSONOK(w, "更新成功")
- } else {
- p := &db.CreateProjectParams{
- ID: snowflake.GetId(),
- Name: form.Name,
- StartAt: form.StartAt,
- EndAt: form.EndAt,
- CustomerID: form.CustomerID,
- TotalMoney: form.TotalMoneyF,
- Description: form.Description,
- ApplyAt: form.ApplyAt,
- ApplyUserID: form.ApplyUserID,
- ManagerID: form.ManagerID,
- Members: form.Members,
- Status: form.Status,
- CreatedUserID: authUser.ID,
- }
- cpfs := []*db.CreateProjectFileParams{}
- for _, pfile := range form.ProjectFiles.ProjectFileItems {
- cpfs = append(cpfs, &db.CreateProjectFileParams{
- ID: snowflake.GetId(),
- Name: pfile.Name,
- Path: pfile.Path,
- ProjectID: p.ID,
- CreatedUserID: authUser.ID,
- })
- }
- err := h.biz.ProjectV1().Create(ctx, p, cpfs)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
- h.render.JSONOK(w, "添加成功")
- }
-}
-
-func (h *projectHandler) Data(w http.ResponseWriter, r *http.Request) {
- vars := r.URL.Query()
- t := vars.Get("type")
- if t == "xmselect" {
- res, err := h.biz.ProjectV1().XmSelect(r.Context())
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- h.render.JSON(w, res)
- return
- }
-
- h.render.JSON(w, nil)
-}
-
-func validForm(r *http.Request) (formDto.ProjectForm, error) {
- var err error
- form := formDto.ProjectForm{}
-
- form.ID = convertor.ConvertInt[int64](r.PostFormValue("ID"), 0)
- form.CustomerID, err = strconv.ParseInt(r.PostFormValue("CustomerID"), 10, 64)
- if err != nil || form.CustomerID == 0 {
- return form, errors.New("客户不能为空")
- }
-
- form.Name = r.PostFormValue("Name")
- if len(form.Name) == 0 {
- return form, errors.New("名称不能为空")
- }
- form.StartAt, err = time.ParseInLocation("2006-01-02", r.PostFormValue("StartAt"), time.Local)
- if err != nil {
- return form, errors.New("开始时间格式错误")
- }
- form.EndAt, err = time.ParseInLocation("2006-01-02", r.PostFormValue("EndAt"), time.Local)
- if err != nil {
- return form, errors.New("结束时间格式错误")
- }
-
- if err := form.TotalMoneyF.Scan(r.PostFormValue("TotalMoney")); err != nil {
- return form, errors.New("总金额格式错误")
- }
-
- form.Description = r.PostFormValue("Description")
- form.ApplyAt, err = time.ParseInLocation("2006-01-02", r.PostFormValue("ApplyAt"), time.Local)
- if err != nil {
- return form, errors.New("申请时间格式错误")
- }
- form.ApplyUserID = convertor.ConvertInt[int32](r.PostFormValue("ApplyUserID"), 0)
- if form.ApplyUserID == 0 {
- return form, errors.New("申请人不能为空")
- }
-
- form.ManagerID = convertor.ConvertInt[int32](r.PostFormValue("ManagerID"), 0)
- if form.ManagerID == 0 {
- return form, errors.New("项目经理不能为空")
- }
-
- form.Members = r.PostFormValue("Members")
- if len(form.Members) > 0 {
- membersSplit := strings.SplitSeq(form.Members, ",")
- for v := range membersSplit {
- m := convertor.ConvertInt[int32](v, 0)
- if m == 0 {
- return form, errors.New("项目成员数据错误")
- }
- }
- }
-
- form.Status = convertor.ConvertInt[int16](r.PostFormValue("Status"), 9999)
-
- form.ProjectFiles = &formDto.ProjectFileForm{
- ProjectFileItems: []*formDto.ProjectFileItemForm{},
- }
- fns := r.PostFormValue("Paths")
- if len(fns) > 0 {
- fnsSplit := strings.SplitSeq(fns, ",")
- for v := range fnsSplit {
- if len(v) > 0 {
- read := strings.Split(v, "|")
- if len(read) != 2 {
- return form, errors.New("文件路径数据错误")
- }
- pff := &formDto.ProjectFileItemForm{
- Name: read[0],
- Path: read[1],
- Combination: v,
- }
- form.ProjectFiles.ProjectFileItems = append(form.ProjectFiles.ProjectFileItems, pff)
- }
- }
- }
- return form, nil
-}
diff --git a/internal/erpserver/handler/system/audit.go b/internal/erpserver/handler/system/audit.go
index 03857e7..5cf5046 100644
--- a/internal/erpserver/handler/system/audit.go
+++ b/internal/erpserver/handler/system/audit.go
@@ -3,7 +3,7 @@ package system
import (
"net/http"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/convertor"
"management/internal/pkg/tpl"
diff --git a/internal/erpserver/handler/system/category.go b/internal/erpserver/handler/system/category.go
deleted file mode 100644
index 15fede1..0000000
--- a/internal/erpserver/handler/system/category.go
+++ /dev/null
@@ -1,173 +0,0 @@
-package system
-
-import (
- "net/http"
-
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
- "management/internal/erpserver/biz"
- "management/internal/erpserver/model/form"
- "management/internal/pkg/binding"
- "management/internal/pkg/convertor"
- "management/internal/pkg/tpl"
-)
-
-type CategoryHandler interface {
- List(w http.ResponseWriter, r *http.Request)
- Add(w http.ResponseWriter, r *http.Request)
- AddChildren(w http.ResponseWriter, r *http.Request)
- Edit(w http.ResponseWriter, r *http.Request)
- Save(w http.ResponseWriter, r *http.Request)
- Data(w http.ResponseWriter, r *http.Request)
- Refresh(w http.ResponseWriter, r *http.Request)
- RebuildParentPath(w http.ResponseWriter, r *http.Request)
-}
-
-type categoryHandler struct {
- render tpl.Renderer
- biz biz.IBiz
-}
-
-var _ CategoryHandler = (*categoryHandler)(nil)
-
-func NewCategoryHandler(render tpl.Renderer, biz biz.IBiz) *categoryHandler {
- return &categoryHandler{
- render: render,
- biz: biz,
- }
-}
-
-func (h *categoryHandler) List(w http.ResponseWriter, r *http.Request) {
- switch r.Method {
- case http.MethodGet:
- h.render.HTML(w, r, "category/list.tmpl", nil)
- case http.MethodPost:
- var q dto.SearchDto
- q.SearchStatus = convertor.ConvertInt(r.PostFormValue("status"), 9999)
- q.SearchParentID = convertor.ConvertInt(r.PostFormValue("parentId"), 0)
- q.SearchName = r.PostFormValue("name")
- q.SearchID = convertor.ConvertInt[int64](r.PostFormValue("id"), 0)
- q.Page = convertor.ConvertInt(r.PostFormValue("page"), 1)
- q.Rows = convertor.ConvertInt(r.PostFormValue("rows"), 10)
- res, count, err := h.biz.SystemV1().CategoryBiz().List(r.Context(), q)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- data := tpl.ResponseList{
- Code: 0,
- Message: "ok",
- Count: count,
- Data: res,
- }
- h.render.JSON(w, data)
- default:
- http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed)
- }
-}
-
-func (h *categoryHandler) Add(w http.ResponseWriter, r *http.Request) {
- h.render.HTML(w, r, "category/edit.tmpl", map[string]any{
- "Item": &db.Category{Sort: 6666},
- })
-}
-
-func (h *categoryHandler) AddChildren(w http.ResponseWriter, r *http.Request) {
- vars := r.URL.Query()
- parentID := convertor.QueryInt[int32](vars, "parentID", 0)
- vm := &db.Category{ParentID: parentID, Sort: 6666}
- h.render.HTML(w, r, "category/edit.tmpl", map[string]any{
- "Item": vm,
- })
-}
-
-func (h *categoryHandler) Edit(w http.ResponseWriter, r *http.Request) {
- vars := r.URL.Query()
- id := convertor.QueryInt[int32](vars, "id", 0)
- vm := &db.Category{Sort: 6666}
- if id > 0 {
- vm, _ = h.biz.SystemV1().CategoryBiz().Get(r.Context(), id)
- }
- h.render.HTML(w, r, "category/edit.tmpl", map[string]any{
- "Item": vm,
- })
-}
-
-func (h *categoryHandler) Save(w http.ResponseWriter, r *http.Request) {
- var req form.Category
- if err := binding.Form.Bind(r, &req); err != nil {
- h.render.JSONERR(w, binding.ValidatorErrors(err))
- return
- }
-
- if *req.ID == 0 {
- err := h.biz.SystemV1().CategoryBiz().Create(r.Context(), &req)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
- h.render.JSONOK(w, "添加成功")
- } else {
- err := h.biz.SystemV1().CategoryBiz().Update(r.Context(), &req)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
- h.render.JSONOK(w, "更新成功")
- }
-}
-
-func (h *categoryHandler) Data(w http.ResponseWriter, r *http.Request) {
- ctx := r.Context()
- vars := r.URL.Query()
- t := vars.Get("type")
- if t == "tree" {
- res, err := h.biz.SystemV1().CategoryBiz().Tree(ctx, 0)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- h.render.JSON(w, res)
- return
- } else if t == "xmselect_tree" {
- res, err := h.biz.SystemV1().CategoryBiz().XmSelectTree(ctx, 0)
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- h.render.JSON(w, res)
- return
- } else if t == "xmselect" {
- res, err := h.biz.SystemV1().CategoryBiz().XmSelect(ctx, vars.Get("letter"))
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- h.render.JSON(w, res)
- return
- }
-}
-
-func (h *categoryHandler) Refresh(w http.ResponseWriter, r *http.Request) {
- _, err := h.biz.SystemV1().CategoryBiz().Refresh(r.Context())
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- h.render.JSONOK(w, "刷新成功")
-}
-
-func (h *categoryHandler) RebuildParentPath(w http.ResponseWriter, r *http.Request) {
- err := h.biz.SystemV1().CategoryBiz().RebuildParentPath(r.Context())
- if err != nil {
- h.render.JSONERR(w, err.Error())
- return
- }
-
- h.render.JSONOK(w, "重建成功")
-}
diff --git a/internal/erpserver/handler/system/config.go b/internal/erpserver/handler/system/config.go
index db8324b..be0172e 100644
--- a/internal/erpserver/handler/system/config.go
+++ b/internal/erpserver/handler/system/config.go
@@ -4,11 +4,11 @@ import (
"net/http"
"strings"
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
+ "management/internal/erpserver/model/dto"
systemmodel "management/internal/erpserver/model/system"
systemsvc "management/internal/erpserver/service/v1"
"management/internal/pkg/convertor"
+ "management/internal/pkg/database"
"management/internal/pkg/redis"
"management/internal/pkg/tpl"
)
@@ -76,7 +76,7 @@ func (h *configHandler) Save(w http.ResponseWriter, r *http.Request) {
}
err := h.configsvc.Create(ctx, arg)
if err != nil {
- if db.IsUniqueViolation(err) {
+ if database.IsUniqueViolation(err) {
h.render.JSONERR(w, "数据已存在")
return
}
diff --git a/internal/erpserver/handler/system/department.go b/internal/erpserver/handler/system/department.go
index 9e80f31..1e8b37e 100644
--- a/internal/erpserver/handler/system/department.go
+++ b/internal/erpserver/handler/system/department.go
@@ -3,7 +3,7 @@ package system
import (
"net/http"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/form"
systemmodel "management/internal/erpserver/model/system"
v1 "management/internal/erpserver/service/v1"
diff --git a/internal/erpserver/handler/system/login_log.go b/internal/erpserver/handler/system/login_log.go
index ce96027..da324eb 100644
--- a/internal/erpserver/handler/system/login_log.go
+++ b/internal/erpserver/handler/system/login_log.go
@@ -3,7 +3,7 @@ package system
import (
"net/http"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/convertor"
"management/internal/pkg/tpl"
diff --git a/internal/erpserver/handler/system/menu.go b/internal/erpserver/handler/system/menu.go
index 59da6a0..9608508 100644
--- a/internal/erpserver/handler/system/menu.go
+++ b/internal/erpserver/handler/system/menu.go
@@ -6,10 +6,10 @@ import (
"strings"
"time"
- db "management/internal/db/sqlc"
systemmodel "management/internal/erpserver/model/system"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/convertor"
+ "management/internal/pkg/database"
"management/internal/pkg/middleware"
"management/internal/pkg/tpl"
@@ -155,7 +155,7 @@ func (h *menuHandler) Save(w http.ResponseWriter, r *http.Request) {
}
err := h.svc.Create(ctx, arg)
if err != nil {
- if db.IsUniqueViolation(err) {
+ if database.IsUniqueViolation(err) {
h.render.JSONERR(w, "菜单已存在")
return
}
diff --git a/internal/erpserver/handler/system/role.go b/internal/erpserver/handler/system/role.go
index 65f2b54..20d5013 100644
--- a/internal/erpserver/handler/system/role.go
+++ b/internal/erpserver/handler/system/role.go
@@ -4,7 +4,7 @@ import (
"net/http"
"strings"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/form"
"management/internal/erpserver/model/system"
v1 "management/internal/erpserver/service/v1"
diff --git a/internal/erpserver/handler/system/user.go b/internal/erpserver/handler/system/user.go
index b18a8e7..26527dd 100644
--- a/internal/erpserver/handler/system/user.go
+++ b/internal/erpserver/handler/system/user.go
@@ -4,8 +4,7 @@ import (
"log"
"net/http"
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/form"
systemmodel "management/internal/erpserver/model/system"
v1 "management/internal/erpserver/service/v1"
@@ -47,7 +46,7 @@ func NewUserHandler(
func (h *userHandler) Add(w http.ResponseWriter, r *http.Request) {
h.render.HTML(w, r, "user/edit.tmpl", map[string]any{
- "Item": &db.SysUser{
+ "Item": &systemmodel.User{
HashedPassword: nil,
},
})
diff --git a/internal/erpserver/http.go b/internal/erpserver/http.go
deleted file mode 100644
index a44c98a..0000000
--- a/internal/erpserver/http.go
+++ /dev/null
@@ -1,207 +0,0 @@
-package erpserver
-
-// import (
-// "net/http"
-
-// "management/internal/erpserver/handler"
-// mw "management/internal/pkg/middleware"
-
-// "github.com/go-chi/chi/v5"
-// "github.com/go-chi/chi/v5/middleware"
-// )
-
-// func NewRouter(handler handler.IHandler, mw mw.Middleware) *chi.Mux {
-// r := chi.NewRouter()
-
-// r.Use(middleware.RequestID)
-// r.Use(middleware.RealIP)
-// // r.Use(middleware.Logger)
-// r.Use(middleware.Recoverer)
-
-// staticServer := http.FileServer(http.Dir("./web/statics/"))
-// r.Handle("/statics/*", http.StripPrefix("/statics", staticServer))
-
-// uploadServer := http.FileServer(http.Dir("./upload/"))
-// r.Handle("/upload/*", http.StripPrefix("/upload", uploadServer))
-
-// r.Group(func(r chi.Router) {
-// r.Use(mw.NoSurf) // CSRF
-// r.Use(mw.LoadSession) // Session
-
-// // capthchaHandler := common.NewCaptchaHandler(handler))
-// // r.Get("/captcha", handler.CommonHandler().CaptchaHandler().Captcha)
-
-// r.Get("/", handler.SystemHandler().UserHandler().Login)
-// r.Post("/login", handler.SystemHandler().UserHandler().Login)
-// r.Get("/logout", handler.SystemHandler().UserHandler().Logout)
-
-// r.With(mw.Authorize, mw.Audit).Post("/upload/img", handler.CommonHandler().UploadHandler().Img)
-// r.With(mw.Authorize, mw.Audit).Post("/upload/file", handler.CommonHandler().UploadHandler().File)
-// r.With(mw.Authorize, mw.Audit).Post("/upload/mutilfile", handler.CommonHandler().UploadHandler().MutilFiles)
-
-// r.With(mw.Authorize).Get("/home.html", handler.SystemHandler().Home)
-// r.With(mw.Authorize).Get("/dashboard", handler.SystemHandler().Dashboard)
-// r.With(mw.Authorize).Get("/pear.json", handler.SystemHandler().ConfigHandler().Pear)
-
-// r.Route("/system", func(r chi.Router) {
-// r.Use(mw.Authorize)
-
-// r.Route("/config", func(r chi.Router) {
-// r.Use(mw.Audit)
-// r.Get("/list", handler.SystemHandler().ConfigHandler().List)
-// r.Post("/list", handler.SystemHandler().ConfigHandler().List)
-// r.Get("/add", handler.SystemHandler().ConfigHandler().Add)
-// r.Get("/edit", handler.SystemHandler().ConfigHandler().Edit)
-// r.Post("/save", handler.SystemHandler().ConfigHandler().Save)
-// r.Post("/reset_pear", handler.SystemHandler().ConfigHandler().ResetPear)
-// r.Post("/refresh", handler.SystemHandler().ConfigHandler().Refresh)
-// })
-
-// r.Route("/department", func(r chi.Router) {
-// r.Use(mw.Audit)
-// r.Get("/list", handler.SystemHandler().DepartmentHandler().List)
-// r.Post("/list", handler.SystemHandler().DepartmentHandler().List)
-// r.Get("/add", handler.SystemHandler().DepartmentHandler().Add)
-// r.Get("/add_children", handler.SystemHandler().DepartmentHandler().AddChildren)
-// r.Get("/edit", handler.SystemHandler().DepartmentHandler().Edit)
-// r.Post("/save", handler.SystemHandler().DepartmentHandler().Save)
-// r.Post("/data", handler.SystemHandler().DepartmentHandler().Data)
-// r.Post("/refresh", handler.SystemHandler().DepartmentHandler().Refresh)
-// r.Post("/rebuild_parent_path", handler.SystemHandler().DepartmentHandler().RebuildParentPath)
-// })
-
-// r.Route("/role", func(r chi.Router) {
-// r.Use(mw.Audit)
-// r.Get("/list", handler.SystemHandler().RoleHandler().List)
-// r.Post("/list", handler.SystemHandler().RoleHandler().List)
-// r.Get("/add", handler.SystemHandler().RoleHandler().Add)
-// r.Get("/add_children", handler.SystemHandler().RoleHandler().AddChildren)
-// r.Get("/edit", handler.SystemHandler().RoleHandler().Edit)
-// r.Post("/save", handler.SystemHandler().RoleHandler().Save)
-// r.Post("/data", handler.SystemHandler().RoleHandler().Data)
-// r.Post("/refresh", handler.SystemHandler().RoleHandler().Refresh)
-// r.Post("/rebuild_parent_path", handler.SystemHandler().RoleHandler().RebuildParentPath)
-// r.Post("/refresh_role_menus", handler.SystemHandler().RoleHandler().RefreshRoleMenus)
-// r.Get("/set_menu", handler.SystemHandler().RoleHandler().SetMenu)
-// r.Post("/set_menu", handler.SystemHandler().RoleHandler().SetMenu)
-// })
-
-// r.Route("/user", func(r chi.Router) {
-// r.Get("/list", handler.SystemHandler().UserHandler().List)
-// r.Post("/list", handler.SystemHandler().UserHandler().List)
-// r.Get("/add", handler.SystemHandler().UserHandler().Add)
-// r.Get("/edit", handler.SystemHandler().UserHandler().Edit)
-// r.Post("/save", handler.SystemHandler().UserHandler().Save)
-// r.Get("/profile", handler.SystemHandler().UserHandler().Profile)
-// r.Post("/data", handler.SystemHandler().UserHandler().Data)
-// })
-
-// r.Route("/login_log", func(r chi.Router) {
-// r.Get("/list", handler.SystemHandler().LoginLogHandler().List)
-// r.Post("/list", handler.SystemHandler().LoginLogHandler().List)
-// })
-
-// r.Route("/audit_log", func(r chi.Router) {
-// r.Get("/list", handler.SystemHandler().AuditHandler().List)
-// r.Post("/list", handler.SystemHandler().AuditHandler().List)
-// })
-
-// r.Get("/menus", handler.SystemHandler().MenuHandler().Menus)
-// r.Route("/menu", func(r chi.Router) {
-// r.Use(mw.Audit)
-// r.Get("/list", handler.SystemHandler().MenuHandler().List)
-// r.Post("/list", handler.SystemHandler().MenuHandler().List)
-// r.Get("/add", handler.SystemHandler().MenuHandler().Add)
-// r.Get("/add_children", handler.SystemHandler().MenuHandler().AddChildren)
-// r.Get("/edit", handler.SystemHandler().MenuHandler().Edit)
-// r.Post("/save", handler.SystemHandler().MenuHandler().Save)
-// r.Post("/data", handler.SystemHandler().MenuHandler().Data)
-// r.Post("/refresh_cache", handler.SystemHandler().MenuHandler().Refresh)
-// })
-
-// r.Route("/category", func(r chi.Router) {
-// r.Use(mw.Audit)
-// r.Get("/list", handler.SystemHandler().CategoryHandler().List)
-// r.Post("/list", handler.SystemHandler().CategoryHandler().List)
-// r.Get("/add", handler.SystemHandler().CategoryHandler().Add)
-// r.Get("/add_children", handler.SystemHandler().CategoryHandler().AddChildren)
-// r.Get("/edit", handler.SystemHandler().CategoryHandler().Edit)
-// r.Post("/save", handler.SystemHandler().CategoryHandler().Save)
-// r.Post("/data", handler.SystemHandler().CategoryHandler().Data)
-// r.Post("/refresh", handler.SystemHandler().CategoryHandler().Refresh)
-// r.Post("/rebuild_parent_path", handler.SystemHandler().CategoryHandler().RebuildParentPath)
-// })
-// })
-
-// // 客户
-// r.Route("/customer", func(r chi.Router) {
-// r.Use(mw.Authorize)
-// r.Get("/list", handler.CustomerHandler().List)
-// r.Post("/list", handler.CustomerHandler().List)
-// r.Get("/add", handler.CustomerHandler().Add)
-// r.Get("/edit", handler.CustomerHandler().Edit)
-// r.Post("/save", handler.CustomerHandler().Save)
-// })
-
-// // 项目
-// r.Route("/project", func(r chi.Router) {
-// r.Use(mw.Authorize)
-// r.Get("/list", handler.ProjectHandler().List)
-// r.Post("/list", handler.ProjectHandler().List)
-// r.Get("/add", handler.ProjectHandler().Add)
-// r.Get("/edit", handler.ProjectHandler().Edit)
-// r.Post("/save", handler.ProjectHandler().Save)
-// r.Post("/data", handler.ProjectHandler().Data)
-// r.Get("/dashboard", handler.ProjectHandler().Dashboard)
-// r.Post("/dashboard", handler.ProjectHandler().Dashboard)
-// })
-
-// // 项目预算
-// r.Route("/budget", func(r chi.Router) {
-// r.Use(mw.Authorize)
-// r.Get("/list", handler.BudgetHandler().List)
-// r.Post("/list", handler.BudgetHandler().List)
-// r.Get("/add", handler.BudgetHandler().Add)
-// r.Get("/edit", handler.BudgetHandler().Edit)
-// r.Post("/save", handler.BudgetHandler().Save)
-// r.Post("/data", handler.BudgetHandler().Data)
-// })
-
-// // 回款单
-// r.Route("/income", func(r chi.Router) {
-// r.Use(mw.Authorize)
-// r.Get("/list", handler.IncomeHandler().List)
-// r.Post("/list", handler.IncomeHandler().List)
-// r.Get("/add", handler.IncomeHandler().Add)
-// r.Get("/edit", handler.IncomeHandler().Edit)
-// r.Post("/save", handler.IncomeHandler().Save)
-// })
-
-// // 费用报销单
-// r.Route("/expense", func(r chi.Router) {
-// r.Use(mw.Authorize)
-// r.Get("/list", handler.ExpenseHandler().List)
-// r.Post("/list", handler.ExpenseHandler().List)
-// r.Get("/add", handler.ExpenseHandler().Add)
-// r.Get("/edit", handler.ExpenseHandler().Edit)
-// r.Post("/save", handler.ExpenseHandler().Save)
-// })
-// })
-
-// return r
-// }
-
-/*
-
-我现在要设计一个订单号,要求如下:
-1、可读性强,但不能被预测:包含:业务标识(订单、支付),便于人工识别。
-2、唯一性:确保全局唯一,不能重复(特别是高并发场景下)。
-3、值递增:生成的订单号都是递增,可排序。
-4、高性能:支持高并发生成,避免阻塞或延迟,设计的时候尽量考虑内存生成,最差也是基于Redis生成。
-5、能适应分库分表:订单号中包括分库分表信息,方便路由。
-6、分布式部署:以服务的方式对外提供,集群部署避免单点瓶颈,
-
-用golang语言开发
-该chat使用中文交流
-
-*/
diff --git a/internal/db/model/dto/authorize_user.go b/internal/erpserver/model/dto/authorize_user.go
similarity index 100%
rename from internal/db/model/dto/authorize_user.go
rename to internal/erpserver/model/dto/authorize_user.go
diff --git a/internal/db/model/dto/menu_ui_dto.go b/internal/erpserver/model/dto/menu_ui_dto.go
similarity index 100%
rename from internal/db/model/dto/menu_ui_dto.go
rename to internal/erpserver/model/dto/menu_ui_dto.go
diff --git a/internal/db/model/dto/pear.go b/internal/erpserver/model/dto/pear.go
similarity index 100%
rename from internal/db/model/dto/pear.go
rename to internal/erpserver/model/dto/pear.go
diff --git a/internal/db/model/dto/search.go b/internal/erpserver/model/dto/search.go
similarity index 100%
rename from internal/db/model/dto/search.go
rename to internal/erpserver/model/dto/search.go
diff --git a/internal/db/model/dto/set_menu_dto.go b/internal/erpserver/model/dto/set_menu_dto.go
similarity index 100%
rename from internal/db/model/dto/set_menu_dto.go
rename to internal/erpserver/model/dto/set_menu_dto.go
diff --git a/internal/db/model/dto/system.go b/internal/erpserver/model/dto/system.go
similarity index 100%
rename from internal/db/model/dto/system.go
rename to internal/erpserver/model/dto/system.go
diff --git a/internal/db/model/dto/tree.go b/internal/erpserver/model/dto/tree.go
similarity index 100%
rename from internal/db/model/dto/tree.go
rename to internal/erpserver/model/dto/tree.go
diff --git a/internal/db/model/dto/xm_select.go b/internal/erpserver/model/dto/xm_select.go
similarity index 100%
rename from internal/db/model/dto/xm_select.go
rename to internal/erpserver/model/dto/xm_select.go
diff --git a/internal/erpserver/model/system/audit_log.go b/internal/erpserver/model/system/audit_log.go
index 482a504..db51663 100644
--- a/internal/erpserver/model/system/audit_log.go
+++ b/internal/erpserver/model/system/audit_log.go
@@ -7,7 +7,7 @@ import (
"strings"
"time"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
)
type AuditLogRepository interface {
diff --git a/internal/erpserver/model/system/config.go b/internal/erpserver/model/system/config.go
index ae172ac..5f364ca 100644
--- a/internal/erpserver/model/system/config.go
+++ b/internal/erpserver/model/system/config.go
@@ -4,7 +4,7 @@ import (
"context"
"time"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
)
type ConfigRepository interface {
diff --git a/internal/erpserver/model/system/department.go b/internal/erpserver/model/system/department.go
index e5f6fc7..7562808 100644
--- a/internal/erpserver/model/system/department.go
+++ b/internal/erpserver/model/system/department.go
@@ -4,7 +4,7 @@ import (
"context"
"time"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
)
type DepartmentRepository interface {
diff --git a/internal/erpserver/model/system/login_log.go b/internal/erpserver/model/system/login_log.go
index f555976..7503df4 100644
--- a/internal/erpserver/model/system/login_log.go
+++ b/internal/erpserver/model/system/login_log.go
@@ -4,7 +4,7 @@ import (
"context"
"time"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
)
type LoginLogRepository interface {
diff --git a/internal/erpserver/model/system/role.go b/internal/erpserver/model/system/role.go
index 98b2835..5635967 100644
--- a/internal/erpserver/model/system/role.go
+++ b/internal/erpserver/model/system/role.go
@@ -4,7 +4,7 @@ import (
"context"
"time"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
)
type RoleRepository interface {
diff --git a/internal/erpserver/model/system/user.go b/internal/erpserver/model/system/user.go
index ec66e32..ae6949d 100644
--- a/internal/erpserver/model/system/user.go
+++ b/internal/erpserver/model/system/user.go
@@ -4,7 +4,7 @@ import (
"context"
"time"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"github.com/google/uuid"
)
diff --git a/internal/erpserver/repository/system/audit_log.go b/internal/erpserver/repository/system/audit_log.go
index 0ffd285..9d336fe 100644
--- a/internal/erpserver/repository/system/audit_log.go
+++ b/internal/erpserver/repository/system/audit_log.go
@@ -3,7 +3,7 @@ package system
import (
"context"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
diff --git a/internal/erpserver/repository/system/config.go b/internal/erpserver/repository/system/config.go
index b1cc9fd..026ad8a 100644
--- a/internal/erpserver/repository/system/config.go
+++ b/internal/erpserver/repository/system/config.go
@@ -3,7 +3,7 @@ package system
import (
"context"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
diff --git a/internal/erpserver/repository/system/department.go b/internal/erpserver/repository/system/department.go
index 10f7fab..f8003f5 100644
--- a/internal/erpserver/repository/system/department.go
+++ b/internal/erpserver/repository/system/department.go
@@ -3,7 +3,7 @@ package system
import (
"context"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
diff --git a/internal/erpserver/repository/system/login_log.go b/internal/erpserver/repository/system/login_log.go
index cd47522..d7c0d3a 100644
--- a/internal/erpserver/repository/system/login_log.go
+++ b/internal/erpserver/repository/system/login_log.go
@@ -3,7 +3,7 @@ package system
import (
"context"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
diff --git a/internal/erpserver/repository/system/role.go b/internal/erpserver/repository/system/role.go
index 5215914..22c3b8a 100644
--- a/internal/erpserver/repository/system/role.go
+++ b/internal/erpserver/repository/system/role.go
@@ -3,7 +3,7 @@ package system
import (
"context"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
diff --git a/internal/erpserver/repository/system/user.go b/internal/erpserver/repository/system/user.go
index f095842..5d29407 100644
--- a/internal/erpserver/repository/system/user.go
+++ b/internal/erpserver/repository/system/user.go
@@ -3,7 +3,7 @@ package system
import (
"context"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/repository"
)
diff --git a/internal/erpserver/service/v1/service.go b/internal/erpserver/service/v1/service.go
index 4f57fee..792ec04 100644
--- a/internal/erpserver/service/v1/service.go
+++ b/internal/erpserver/service/v1/service.go
@@ -4,7 +4,7 @@ import (
"context"
"time"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/form"
"management/internal/erpserver/model/system"
"management/internal/erpserver/model/view"
diff --git a/internal/erpserver/service/v1/system/audit_log.go b/internal/erpserver/service/v1/system/audit_log.go
index 705cad3..5f35193 100644
--- a/internal/erpserver/service/v1/system/audit_log.go
+++ b/internal/erpserver/service/v1/system/audit_log.go
@@ -3,7 +3,7 @@ package system
import (
"context"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
v1 "management/internal/erpserver/service/v1"
)
diff --git a/internal/erpserver/service/v1/system/config.go b/internal/erpserver/service/v1/system/config.go
index 805be03..0f604ce 100644
--- a/internal/erpserver/service/v1/system/config.go
+++ b/internal/erpserver/service/v1/system/config.go
@@ -5,7 +5,7 @@ import (
"encoding/json"
"time"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/know"
diff --git a/internal/erpserver/service/v1/system/department.go b/internal/erpserver/service/v1/system/department.go
index cdd5e2e..57f458d 100644
--- a/internal/erpserver/service/v1/system/department.go
+++ b/internal/erpserver/service/v1/system/department.go
@@ -8,13 +8,13 @@ import (
"strconv"
"time"
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/form"
"management/internal/erpserver/model/system"
"management/internal/erpserver/model/view"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/convertor"
+ "management/internal/pkg/database"
"management/internal/pkg/know"
"management/internal/pkg/redis"
)
@@ -61,7 +61,7 @@ func (s *departmentService) Create(ctx context.Context, req *form.Department) er
}
err := s.repo.Create(ctx, arg)
if err != nil {
- if db.IsUniqueViolation(err) {
+ if database.IsUniqueViolation(err) {
return errors.New("部门已存在")
}
return err
diff --git a/internal/erpserver/service/v1/system/login_log.go b/internal/erpserver/service/v1/system/login_log.go
index 2c53bb3..c5863b4 100644
--- a/internal/erpserver/service/v1/system/login_log.go
+++ b/internal/erpserver/service/v1/system/login_log.go
@@ -4,7 +4,7 @@ import (
"context"
"time"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
v1 "management/internal/erpserver/service/v1"
)
diff --git a/internal/erpserver/service/v1/system/menu.go b/internal/erpserver/service/v1/system/menu.go
index 81d78ed..85a38f4 100644
--- a/internal/erpserver/service/v1/system/menu.go
+++ b/internal/erpserver/service/v1/system/menu.go
@@ -7,7 +7,7 @@ import (
"strings"
"time"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/system"
"management/internal/erpserver/model/view"
"management/internal/erpserver/repository"
diff --git a/internal/erpserver/service/v1/system/role.go b/internal/erpserver/service/v1/system/role.go
index ba7e897..1364935 100644
--- a/internal/erpserver/service/v1/system/role.go
+++ b/internal/erpserver/service/v1/system/role.go
@@ -8,13 +8,13 @@ import (
"strconv"
"time"
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/form"
"management/internal/erpserver/model/system"
"management/internal/erpserver/model/view"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/convertor"
+ "management/internal/pkg/database"
"management/internal/pkg/know"
"management/internal/pkg/redis"
)
@@ -63,7 +63,7 @@ func (s *roleService) Create(ctx context.Context, req *form.Role) error {
}
err := s.repo.Create(ctx, arg)
if err != nil {
- if db.IsUniqueViolation(err) {
+ if database.IsUniqueViolation(err) {
return errors.New("角色名称已存在")
}
return err
diff --git a/internal/erpserver/service/v1/system/user.go b/internal/erpserver/service/v1/system/user.go
index ed8b362..80937bd 100644
--- a/internal/erpserver/service/v1/system/user.go
+++ b/internal/erpserver/service/v1/system/user.go
@@ -7,13 +7,13 @@ import (
"strconv"
"time"
- "management/internal/db/model/dto"
- db "management/internal/db/sqlc"
+ "management/internal/erpserver/model/dto"
"management/internal/erpserver/model/form"
"management/internal/erpserver/model/system"
"management/internal/erpserver/model/view"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/crypto"
+ "management/internal/pkg/database"
"management/internal/pkg/know"
"management/internal/pkg/rand"
"management/internal/pkg/session"
@@ -76,7 +76,7 @@ func (b *userService) Create(ctx context.Context, req *form.User) error {
}
err = b.repo.Create(ctx, user)
if err != nil {
- if db.IsUniqueViolation(err) {
+ if database.IsUniqueViolation(err) {
return errors.New("用户已经存在")
}
return err
diff --git a/internal/erpserver/store/expansion.go b/internal/erpserver/store/expansion.go
deleted file mode 100644
index 3da45bd..0000000
--- a/internal/erpserver/store/expansion.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package store
-
-import "management/internal/erpserver/store/system"
-
-// ======================================================================================
-// system
-
-type SystemExpansion interface {
- User() system.UserStore
- LoginLog() system.LoginLogStore
- Role() system.RoleStore
-}
-
-func (store *datastore) User() system.UserStore {
- return system.NewUserStore(store.core)
-}
-
-func (store *datastore) LoginLog() system.LoginLogStore {
- return system.NewLoginLogStore(store.core)
-}
-
-func (store *datastore) Role() system.RoleStore {
- return system.NewRoleStore(store.core)
-}
diff --git a/internal/erpserver/store/store.go b/internal/erpserver/store/store.go
deleted file mode 100644
index 2968470..0000000
--- a/internal/erpserver/store/store.go
+++ /dev/null
@@ -1,62 +0,0 @@
-package store
-
-import (
- "context"
- "sync"
-
- "gorm.io/gorm"
-)
-
-var (
- once sync.Once
- // 全局变量,方便其它包直接调用已初始化好的 datastore 实例.
- engine *datastore
-)
-
-// IStore 定义了 Store 层需要实现的方法.
-type IStore interface {
- DB(ctx context.Context) *gorm.DB
- TX(ctx context.Context, fn func(ctx context.Context) error) error
-
- SystemExpansion
-}
-
-// transactionKey 用于在 context.Context 中存储事务上下文的键.
-type transactionKey struct{}
-
-// datastore 是 IStore 的具体实现.
-type datastore struct {
- core *gorm.DB
-}
-
-// 确保 datastore 实现了 IStore 接口.
-var _ IStore = (*datastore)(nil)
-
-// NewStore 创建一个 IStore 类型的实例.
-func NewStore(db *gorm.DB) *datastore {
- // 确保 engine 只被初始化一次
- once.Do(func() {
- engine = &datastore{db}
- })
-
- return engine
-}
-
-func (store *datastore) DB(ctx context.Context) *gorm.DB {
- db := store.core
- // 从上下文中提取事务实例
- if tx, ok := ctx.Value(transactionKey{}).(*gorm.DB); ok {
- db = tx
- }
-
- return db
-}
-
-func (store *datastore) TX(ctx context.Context, fn func(ctx context.Context) error) error {
- return store.core.WithContext(ctx).Transaction(
- func(tx *gorm.DB) error {
- ctx = context.WithValue(ctx, transactionKey{}, tx)
- return fn(ctx)
- },
- )
-}
diff --git a/internal/erpserver/store/system/login_log.go b/internal/erpserver/store/system/login_log.go
deleted file mode 100644
index e547846..0000000
--- a/internal/erpserver/store/system/login_log.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package system
-
-import (
- "context"
-
- "management/internal/db/model/dto"
- "management/internal/erpserver/model/system"
-
- "gorm.io/gorm"
-)
-
-type LoginLogStore interface {
- Create(ctx context.Context, obj *system.LoginLog) error
- List(ctx context.Context, q dto.SearchDto) ([]*system.LoginLog, int64, error)
-}
-
-type loginLogStore struct {
- db *gorm.DB
-}
-
-var _ LoginLogStore = (*loginLogStore)(nil)
-
-func NewLoginLogStore(db *gorm.DB) *loginLogStore {
- return &loginLogStore{
- db: db,
- }
-}
-
-func (s *loginLogStore) Create(ctx context.Context, obj *system.LoginLog) error {
- return s.db.WithContext(ctx).Create(obj).Error
-}
-
-func (s *loginLogStore) List(ctx context.Context, q dto.SearchDto) ([]*system.LoginLog, int64, error) {
- query := s.db.WithContext(ctx).
- Model(&system.LoginLog{}).
- Where("created_at BETWEEN ? AND ?", q.SearchTimeBegin, q.SearchTimeEnd)
- if q.SearchEmail != "" {
- query = query.Where("email LIKE ?", "%"+q.SearchEmail+"%")
- }
-
- var count int64
- err := query.Count(&count).Error
- if err != nil {
- return nil, 0, err
- }
-
- var logs []*system.LoginLog
- err = query.
- Order("id DESC").
- Offset((q.Page - 1) * q.Rows).
- Limit(q.Rows).
- Find(&logs).
- Error
- if err != nil {
- return nil, 0, err
- }
- return logs, count, nil
-}
diff --git a/internal/erpserver/store/system/role.go b/internal/erpserver/store/system/role.go
deleted file mode 100644
index 9406b82..0000000
--- a/internal/erpserver/store/system/role.go
+++ /dev/null
@@ -1,44 +0,0 @@
-package system
-
-import (
- "context"
-
- "management/internal/erpserver/model/system"
-
- "gorm.io/gorm"
-)
-
-type RoleStore interface {
- Create(ctx context.Context, obj *system.Role) error
- Update(ctx context.Context, obj *system.Role) error
- Get(ctx context.Context, id int32) (*system.Role, error)
-}
-
-type roleStore struct {
- db *gorm.DB
-}
-
-var _ RoleStore = (*roleStore)(nil)
-
-func NewRoleStore(db *gorm.DB) *roleStore {
- return &roleStore{
- db: db,
- }
-}
-
-func (s *roleStore) Create(ctx context.Context, obj *system.Role) error {
- return s.db.WithContext(ctx).Create(obj).Error
-}
-
-func (s *roleStore) Update(ctx context.Context, obj *system.Role) error {
- return s.db.WithContext(ctx).Save(obj).Error
-}
-
-func (s *roleStore) Get(ctx context.Context, id int32) (*system.Role, error) {
- var role system.Role
- err := s.db.WithContext(ctx).Where("id =?", id).First(&role).Error
- if err != nil {
- return nil, err
- }
- return &role, nil
-}
diff --git a/internal/erpserver/store/system/user.go b/internal/erpserver/store/system/user.go
deleted file mode 100644
index f578238..0000000
--- a/internal/erpserver/store/system/user.go
+++ /dev/null
@@ -1,110 +0,0 @@
-package system
-
-import (
- "context"
-
- "management/internal/db/model/dto"
- "management/internal/erpserver/model/system"
-
- "gorm.io/gorm"
-)
-
-// UserStore 定义了 user 模块在 store 层所实现的方法.
-type UserStore interface {
- Create(ctx context.Context, obj *system.User) error
- Update(ctx context.Context, obj *system.User) error
- Get(ctx context.Context, id int32) (*system.User, error)
- GetByEmail(ctx context.Context, email string) (*system.User, error)
- All(ctx context.Context) ([]*system.User, error)
- List(ctx context.Context, q dto.SearchDto) ([]*system.User, int64, error)
-
- UserExpansion
-}
-
-// UserExpansion 定义了用户操作的附加方法.
-type UserExpansion interface{}
-
-// userStore 是 UserStore 接口的实现.
-type userStore struct {
- db *gorm.DB
-}
-
-// 确保 userStore 实现了 UserStore 接口.
-var _ UserStore = (*userStore)(nil)
-
-// NewUserStore 创建 userStore 的实例.
-func NewUserStore(db *gorm.DB) *userStore {
- return &userStore{
- db: db,
- }
-}
-
-func (s *userStore) Create(ctx context.Context, obj *system.User) error {
- return s.db.WithContext(ctx).Create(obj).Error
-}
-
-func (s *userStore) Update(ctx context.Context, obj *system.User) error {
- return s.db.WithContext(ctx).Save(obj).Error
-}
-
-func (s *userStore) Get(ctx context.Context, id int32) (*system.User, error) {
- var user system.User
- err := s.db.WithContext(ctx).Where("id = ?", id).First(&user).Error
- if err != nil {
- return nil, err
- }
- return &user, nil
-}
-
-func (s *userStore) GetByEmail(ctx context.Context, email string) (*system.User, error) {
- var user system.User
- err := s.db.WithContext(ctx).Where("email = ?", email).First(&user).Error
- if err != nil {
- return nil, err
- }
- return &user, nil
-}
-
-func (s *userStore) All(ctx context.Context) ([]*system.User, error) {
- var users []*system.User
- err := s.db.WithContext(ctx).Find(&users).Error
- if err != nil {
- return nil, err
- }
- return users, nil
-}
-
-func (s *userStore) List(ctx context.Context, q dto.SearchDto) ([]*system.User, int64, error) {
- query := s.db.WithContext(ctx).
- Model(&system.User{}).
- Where("created_at BETWEEN? AND?", q.SearchTimeBegin, q.SearchTimeEnd)
- if q.SearchID != 0 {
- query = query.Where("id = ?", q.SearchID)
- }
- if q.SearchName != "" {
- query = query.Where("username LIKE ?", "%"+q.SearchName+"%")
- }
- if q.SearchEmail != "" {
- query = query.Where("email LIKE ?", "%"+q.SearchEmail+"%")
- }
- if q.SearchStatus != 9999 {
- query = query.Where("status = ?", q.SearchStatus)
- }
-
- var count int64
- err := query.Count(&count).Error
- if err != nil {
- return nil, 0, err
- }
-
- var users []*system.User
- err = query.
- Order("id DESC").
- Offset((q.Page - 1) * q.Rows).
- Limit(q.Rows).
- Find(&users).Error
- if err != nil {
- return nil, 0, err
- }
- return users, count, nil
-}
diff --git a/internal/pkg/database/error.go b/internal/pkg/database/error.go
new file mode 100644
index 0000000..fa64364
--- /dev/null
+++ b/internal/pkg/database/error.go
@@ -0,0 +1,15 @@
+package database
+
+import (
+ "errors"
+
+ "gorm.io/gorm"
+)
+
+func IsUniqueViolation(err error) bool {
+ return errors.Is(err, gorm.ErrDuplicatedKey)
+}
+
+func IsNoRows(err error) bool {
+ return errors.Is(err, gorm.ErrRecordNotFound)
+}
diff --git a/internal/pkg/know/pearadmin/pearadmin.go b/internal/pkg/know/pearadmin/pearadmin.go
index 7af91e0..d47d1a5 100644
--- a/internal/pkg/know/pearadmin/pearadmin.go
+++ b/internal/pkg/know/pearadmin/pearadmin.go
@@ -1,6 +1,6 @@
package pearadmin
-import "management/internal/db/model/dto"
+import "management/internal/erpserver/model/dto"
const PearKey = "PEAR_JSON"
diff --git a/internal/pkg/middleware/authorize.go b/internal/pkg/middleware/authorize.go
index d2b2aca..3d8d198 100644
--- a/internal/pkg/middleware/authorize.go
+++ b/internal/pkg/middleware/authorize.go
@@ -5,7 +5,7 @@ import (
"encoding/json"
"net/http"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/pkg/know"
)
diff --git a/internal/pkg/middleware/middleware.go b/internal/pkg/middleware/middleware.go
index ea04afa..cddb398 100644
--- a/internal/pkg/middleware/middleware.go
+++ b/internal/pkg/middleware/middleware.go
@@ -4,7 +4,7 @@ import (
"context"
"net/http"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
v1 "management/internal/erpserver/service/v1"
"management/internal/pkg/session"
)
diff --git a/internal/pkg/tpl/html.go b/internal/pkg/tpl/html.go
index 8522dbb..8b3eff7 100644
--- a/internal/pkg/tpl/html.go
+++ b/internal/pkg/tpl/html.go
@@ -6,7 +6,7 @@ import (
"path/filepath"
"strings"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
)
type TemplateConfig struct {
diff --git a/internal/pkg/tpl/html_btn.go b/internal/pkg/tpl/html_btn.go
index 9ee3b97..2928cd1 100644
--- a/internal/pkg/tpl/html_btn.go
+++ b/internal/pkg/tpl/html_btn.go
@@ -5,7 +5,7 @@ import (
"path/filepath"
"strings"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
)
func (r *render) btnFuncs() map[string]any {
diff --git a/internal/pkg/tpl/util.go b/internal/pkg/tpl/util.go
index 6430e3e..c2c630a 100644
--- a/internal/pkg/tpl/util.go
+++ b/internal/pkg/tpl/util.go
@@ -12,7 +12,7 @@ import (
"slices"
"strings"
- "management/internal/db/model/dto"
+ "management/internal/erpserver/model/dto"
"management/internal/pkg/know"
templates "management/web/templates/manage"
diff --git a/sqlc.yaml b/sqlc.yaml
deleted file mode 100644
index 85eda77..0000000
--- a/sqlc.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-version: "2"
-sql:
-- schema: "internal/db/migration"
- queries: "internal/db/query"
- engine: "postgresql"
- gen:
- go:
- package: "db"
- out: "internal/db/sqlc"
- sql_package: "pgx/v5"
- emit_json_tags: true
- emit_prepared_queries: true
- emit_interface: true
- emit_exact_table_names: false
- emit_empty_slices: true
- emit_params_struct_pointers: true
- emit_result_struct_pointers: true
- overrides:
- - db_type: "timestamptz"
- go_type: "time.Time"
- - db_type: "uuid"
- go_type: "github.com/google/uuid.UUID"