init: init refactor

This commit is contained in:
Blizzard
2026-04-27 00:02:18 +08:00
commit e515f6a287
360 changed files with 30713 additions and 0 deletions
+23
View File
@@ -0,0 +1,23 @@
Name: file-api
Host: 0.0.0.0
Port: 9002
Auth:
AccessSecret: 9149f2eb-d517-4a50-a03a-231dbcf0d872
AccessExpire: 7200
# file-rpc 服务配置
FileRpc:
Etcd:
Hosts:
- 192.168.100.127:2379
Key: file.rpc
# MinIO
Minio:
Endpoint: 129.28.103.17:3407
AccessKeyId: qP5QXP3g6Axw1hkwX21Y
AccessKeySecret: sddT6J3S6yDn9m1wfth0pzelPg9KWmbHjMAUF5S9
BucketName: sundynix-plant
BucketUrl: https://res.sundynix.cn/sundynix-plant
UseSsl: false
+60
View File
@@ -0,0 +1,60 @@
syntax = "v1"
info (
title: "文件服务API"
desc: "文件上传、删除、查询等HTTP接口"
author: "sundynix"
version: "v1.0.0"
)
type (
// 文件信息
FileInfo {
Id string `json:"id"`
Name string `json:"name"`
Url string `json:"url"`
Tag string `json:"tag"`
Key string `json:"key"`
Suffix string `json:"suffix"`
Md5 string `json:"md5"`
}
// 批量ID请求
IdsReq {
Ids []string `json:"ids"`
}
// 文件列表查询
FileListReq {
Current int `json:"current,optional"`
PageSize int `json:"pageSize,optional"`
Name string `json:"name,optional"`
}
// 文件ID请求
FileIdReq {
Id string `path:"id"`
}
)
// ========== 需要鉴权的接口 ==========
@server (
prefix: /api/file
group: file
jwt: Auth
)
service file-api {
@doc "上传文件"
@handler UploadFile
post /upload returns (FileInfo)
@doc "删除文件"
@handler DeleteFile
delete /delete (IdsReq)
@doc "文件列表"
@handler GetFileList
post /list (FileListReq)
@doc "获取文件信息"
@handler GetFileById
get /:id (FileIdReq) returns (FileInfo)
}
+34
View File
@@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.10.1
package main
import (
"flag"
"fmt"
"sundynix-micro-go/app/file/api/internal/config"
"sundynix-micro-go/app/file/api/internal/handler"
"sundynix-micro-go/app/file/api/internal/svc"
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/rest"
)
var configFile = flag.String("f", "etc/file-api.yaml", "the config file")
func main() {
flag.Parse()
var c config.Config
conf.MustLoad(*configFile, &c)
server := rest.MustNewServer(c.RestConf)
defer server.Stop()
ctx := svc.NewServiceContext(c)
handler.RegisterHandlers(server, ctx)
fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
server.Start()
}
+26
View File
@@ -0,0 +1,26 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.10.1
package config
import (
"github.com/zeromicro/go-zero/rest"
"github.com/zeromicro/go-zero/zrpc"
)
type Config struct {
rest.RestConf
Auth struct {
AccessSecret string
AccessExpire int64
}
FileRpc zrpc.RpcClientConf
Minio struct {
Endpoint string
AccessKeyId string
AccessKeySecret string
BucketName string
BucketUrl string
UseSsl bool
}
}
@@ -0,0 +1,33 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.10.1
package file
import (
"net/http"
"github.com/zeromicro/go-zero/rest/httpx"
"sundynix-micro-go/app/file/api/internal/logic/file"
"sundynix-micro-go/app/file/api/internal/svc"
"sundynix-micro-go/app/file/api/internal/types"
"sundynix-micro-go/common/response"
)
// 删除文件
func DeleteFileHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.IdsReq
if err := httpx.Parse(r, &req); err != nil {
response.Fail(w, err.Error())
return
}
l := file.NewDeleteFileLogic(r.Context(), svcCtx)
err := l.DeleteFile(&req)
if err != nil {
response.Fail(w, err.Error())
} else {
response.Ok(w)
}
}
}
@@ -0,0 +1,33 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.10.1
package file
import (
"net/http"
"github.com/zeromicro/go-zero/rest/httpx"
"sundynix-micro-go/app/file/api/internal/logic/file"
"sundynix-micro-go/app/file/api/internal/svc"
"sundynix-micro-go/app/file/api/internal/types"
"sundynix-micro-go/common/response"
)
// 获取文件信息
func GetFileByIdHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.FileIdReq
if err := httpx.Parse(r, &req); err != nil {
response.Fail(w, err.Error())
return
}
l := file.NewGetFileByIdLogic(r.Context(), svcCtx)
resp, err := l.GetFileById(&req)
if err != nil {
response.Fail(w, err.Error())
} else {
response.OkWithData(w, resp)
}
}
}
@@ -0,0 +1,33 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.10.1
package file
import (
"net/http"
"github.com/zeromicro/go-zero/rest/httpx"
"sundynix-micro-go/app/file/api/internal/logic/file"
"sundynix-micro-go/app/file/api/internal/svc"
"sundynix-micro-go/app/file/api/internal/types"
"sundynix-micro-go/common/response"
)
// 文件列表
func GetFileListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.FileListReq
if err := httpx.Parse(r, &req); err != nil {
response.Fail(w, err.Error())
return
}
l := file.NewGetFileListLogic(r.Context(), svcCtx)
err := l.GetFileList(&req)
if err != nil {
response.Fail(w, err.Error())
} else {
response.Ok(w)
}
}
}
@@ -0,0 +1,25 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.10.1
package file
import (
"net/http"
"sundynix-micro-go/app/file/api/internal/logic/file"
"sundynix-micro-go/app/file/api/internal/svc"
"sundynix-micro-go/common/response"
)
// 上传文件
func UploadFileHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := file.NewUploadFileLogic(r.Context(), svcCtx)
resp, err := l.UploadFile()
if err != nil {
response.Fail(w, err.Error())
} else {
response.OkWithData(w, resp)
}
}
}
+46
View File
@@ -0,0 +1,46 @@
// Code generated by goctl. DO NOT EDIT.
// goctl 1.10.1
package handler
import (
"net/http"
file "sundynix-micro-go/app/file/api/internal/handler/file"
"sundynix-micro-go/app/file/api/internal/svc"
"github.com/zeromicro/go-zero/rest"
)
func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
server.AddRoutes(
[]rest.Route{
{
// 获取文件信息
Method: http.MethodGet,
Path: "/:id",
Handler: file.GetFileByIdHandler(serverCtx),
},
{
// 删除文件
Method: http.MethodDelete,
Path: "/delete",
Handler: file.DeleteFileHandler(serverCtx),
},
{
// 文件列表
Method: http.MethodPost,
Path: "/list",
Handler: file.GetFileListHandler(serverCtx),
},
{
// 上传文件
Method: http.MethodPost,
Path: "/upload",
Handler: file.UploadFileHandler(serverCtx),
},
},
rest.WithJwt(serverCtx.Config.Auth.AccessSecret),
rest.WithPrefix("/api/file"),
)
}
@@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.10.1
package file
import (
"context"
"sundynix-micro-go/app/file/api/internal/svc"
"sundynix-micro-go/app/file/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type DeleteFileLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 删除文件
func NewDeleteFileLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteFileLogic {
return &DeleteFileLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *DeleteFileLogic) DeleteFile(req *types.IdsReq) error {
// todo: add your logic here and delete this line
return nil
}
@@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.10.1
package file
import (
"context"
"sundynix-micro-go/app/file/api/internal/svc"
"sundynix-micro-go/app/file/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetFileByIdLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 获取文件信息
func NewGetFileByIdLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetFileByIdLogic {
return &GetFileByIdLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetFileByIdLogic) GetFileById(req *types.FileIdReq) (resp *types.FileInfo, err error) {
// todo: add your logic here and delete this line
return
}
@@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.10.1
package file
import (
"context"
"sundynix-micro-go/app/file/api/internal/svc"
"sundynix-micro-go/app/file/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetFileListLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 文件列表
func NewGetFileListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetFileListLogic {
return &GetFileListLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetFileListLogic) GetFileList(req *types.FileListReq) error {
// todo: add your logic here and delete this line
return nil
}
@@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.10.1
package file
import (
"context"
"sundynix-micro-go/app/file/api/internal/svc"
"sundynix-micro-go/app/file/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type UploadFileLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 上传文件
func NewUploadFileLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UploadFileLogic {
return &UploadFileLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *UploadFileLogic) UploadFile() (resp *types.FileInfo, err error) {
// todo: add your logic here and delete this line
return
}
@@ -0,0 +1,38 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.10.1
package svc
import (
"sundynix-micro-go/app/file/api/internal/config"
"sundynix-micro-go/app/file/rpc/fileservice"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
"github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/zrpc"
)
type ServiceContext struct {
Config config.Config
FileRpc fileservice.FileService
MinioClient *minio.Client
}
func NewServiceContext(c config.Config) *ServiceContext {
// 初始化MinIO客户端(上传需要在API层操作)
minioClient, err := minio.New(c.Minio.Endpoint, &minio.Options{
Creds: credentials.NewStaticV4(c.Minio.AccessKeyId, c.Minio.AccessKeySecret, ""),
Secure: c.Minio.UseSsl,
})
if err != nil {
logx.Errorf("初始化MinIO客户端失败: %v", err)
panic(err)
}
return &ServiceContext{
Config: c,
FileRpc: fileservice.NewFileService(zrpc.MustNewClient(c.FileRpc)),
MinioClient: minioClient,
}
}
+28
View File
@@ -0,0 +1,28 @@
// Code generated by goctl. DO NOT EDIT.
// goctl 1.10.1
package types
type FileIdReq struct {
Id string `path:"id"`
}
type FileInfo struct {
Id string `json:"id"`
Name string `json:"name"`
Url string `json:"url"`
Tag string `json:"tag"`
Key string `json:"key"`
Suffix string `json:"suffix"`
Md5 string `json:"md5"`
}
type FileListReq struct {
Current int `json:"current,optional"`
PageSize int `json:"pageSize,optional"`
Name string `json:"name,optional"`
}
type IdsReq struct {
Ids []string `json:"ids"`
}