feat: 用户中心

This commit is contained in:
Blizzard
2026-02-11 14:33:00 +08:00
parent 4ccab96ca2
commit 112a1f439c
17 changed files with 1571 additions and 138 deletions
+2
View File
@@ -10,6 +10,7 @@ type ApiGroup struct {
WikiApi WikiApi
OcrApi OcrApi
LevelConfigApi LevelConfigApi
UserProfileApi
} }
var ( var (
@@ -20,4 +21,5 @@ var (
wikiService = service.GroupApp.PlantServiceGroup.WikiService wikiService = service.GroupApp.PlantServiceGroup.WikiService
ocrService = service.GroupApp.PlantServiceGroup.OcrService ocrService = service.GroupApp.PlantServiceGroup.OcrService
levelConfigService = service.GroupApp.PlantServiceGroup.LevelConfigService levelConfigService = service.GroupApp.PlantServiceGroup.LevelConfigService
userProfileService = service.GroupApp.PlantServiceGroup.UserProfileService
) )
+51
View File
@@ -0,0 +1,51 @@
package plant
import (
"sundynix-go/model/commom/response"
"sundynix-go/model/plant/request"
"sundynix-go/utils/auth"
"github.com/gin-gonic/gin"
)
type UserProfileApi struct{}
// UpdateProfile 修改用户信息
// @Tags 个人中心
// @Summary 修改用户信息
// @Security BearerAuth
// @accept json
// @Produce application/json
// @Param data body request.UpdateProfile true "修改用户信息"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"修改成功"}"
// @Router /profile/update [post]
func (a *UserProfileApi) UpdateProfile(c *gin.Context) {
var req request.UpdateProfile
if err := c.ShouldBindJSON(&req); err != nil {
response.FailWithMsg("请求参数错误", c)
return
}
userId := auth.GetUserId(c)
if err := userProfileService.UpdateProfile(req, userId); err != nil {
response.FailWithMsg("更新失败", c)
return
}
response.OkWithMsg("更新成功", c)
}
// ProfileDetail 用户详情
// @Tags 个人中心
// @Summary 用户详情
// @Security BearerAuth
// @Produce application/json
// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
// @Router /profile/detail [get]
func (a *UserProfileApi) ProfileDetail(c *gin.Context) {
userId := auth.GetUserId(c)
res, err := userProfileService.ProfileDetail(userId)
if err != nil {
response.FailWithMsg("查询失败", c)
return
}
response.OkWithData(res, c)
}
+546 -48
View File
@@ -244,6 +244,104 @@ const docTemplate = `{
} }
} }
}, },
"/classify/myClassifyLog": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"识别相关"
],
"summary": "我的植物识别记录",
"parameters": [
{
"description": "分页",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/request.PageInfo"
}
}
],
"responses": {
"200": {
"description": "识别记录",
"schema": {
"allOf": [
{
"$ref": "#/definitions/response.Response"
},
{
"type": "object",
"properties": {
"msg": {
"type": "string"
}
}
}
]
}
}
}
}
},
"/classify/plant": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"识别相关"
],
"summary": "base64植物识别",
"parameters": [
{
"type": "file",
"description": "植物识别",
"name": "file",
"in": "formData",
"required": true
}
],
"responses": {
"200": {
"description": "文件OCR",
"schema": {
"allOf": [
{
"$ref": "#/definitions/response.Response"
},
{
"type": "object",
"properties": {
"msg": {
"type": "string"
}
}
}
]
}
}
}
}
},
"/client/delete": { "/client/delete": {
"post": { "post": {
"security": [ "security": [
@@ -496,6 +594,139 @@ const docTemplate = `{
} }
} }
}, },
"/config/level/add": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"等级配置"
],
"summary": "添加等级配置",
"parameters": [
{
"description": "添加等级配置",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/request.CreateLevelConf"
}
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"添加成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/config/level/detail": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"produces": [
"application/json"
],
"tags": [
"等级配置"
],
"summary": "等级配置详情",
"parameters": [
{
"type": "string",
"description": "等级配置id",
"name": "id",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"查询成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/config/level/list": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"produces": [
"application/json"
],
"tags": [
"等级配置"
],
"summary": "等级配置列表",
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"查询成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/config/level/update": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"等级配置"
],
"summary": "修改等级配置",
"parameters": [
{
"description": "修改等级配置",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/request.UpdateLevelConf"
}
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"修改成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/menu/delete": { "/menu/delete": {
"get": { "get": {
"security": [ "security": [
@@ -829,54 +1060,6 @@ const docTemplate = `{
} }
} }
}, },
"/ocr/base64": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"识别相关"
],
"summary": "base64植物识别",
"parameters": [
{
"type": "file",
"description": "植物识别",
"name": "file",
"in": "formData",
"required": true
}
],
"responses": {
"200": {
"description": "文件OCR",
"schema": {
"allOf": [
{
"$ref": "#/definitions/response.Response"
},
{
"type": "object",
"properties": {
"msg": {
"type": "string"
}
}
}
]
}
}
}
}
},
"/oss/delete": { "/oss/delete": {
"post": { "post": {
"security": [ "security": [
@@ -1255,6 +1438,44 @@ const docTemplate = `{
} }
} }
}, },
"/plant/growth/add": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"我的植物"
],
"summary": "添加成长记录",
"parameters": [
{
"description": "添加成长记录",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/request.CreateGrowthRecord"
}
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"添加成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/plant/page": { "/plant/page": {
"post": { "post": {
"security": [ "security": [
@@ -1293,6 +1514,77 @@ const docTemplate = `{
} }
} }
}, },
"/plant/plan/add": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"我的植物"
],
"summary": "添加养护事项",
"parameters": [
{
"description": "添加养护事项",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/request.CreateCarePlan"
}
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"添加成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/plant/plan/delete": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"produces": [
"application/json"
],
"tags": [
"我的植物"
],
"summary": "删除养护事项",
"parameters": [
{
"type": "string",
"description": "id",
"name": "id",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"删除成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/plant/todayTask": { "/plant/todayTask": {
"get": { "get": {
"security": [ "security": [
@@ -1550,6 +1842,68 @@ const docTemplate = `{
} }
} }
}, },
"/profile/detail": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"produces": [
"application/json"
],
"tags": [
"个人中心"
],
"summary": "用户详情",
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"查询成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/profile/update": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"个人中心"
],
"summary": "修改用户信息",
"parameters": [
{
"description": "修改用户信息",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/request.UpdateProfile"
}
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"修改成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/role/delete": { "/role/delete": {
"post": { "post": {
"description": "删除角色", "description": "删除角色",
@@ -2212,6 +2566,30 @@ const docTemplate = `{
} }
} }
}, },
"/user/info": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"produces": [
"application/json"
],
"tags": [
"用户管理"
],
"summary": "当前登录用户",
"responses": {
"200": {
"description": "{\"code\": 200, \"data\": {}, \"msg\": \"添加成功\"}",
"schema": {
"$ref": "#/definitions/response.Response"
}
}
}
}
},
"/user/save": { "/user/save": {
"post": { "post": {
"security": [ "security": [
@@ -2688,6 +3066,29 @@ const docTemplate = `{
} }
} }
}, },
"request.CreateCarePlan": {
"type": "object",
"required": [
"plantId"
],
"properties": {
"icon": {
"description": "icon信息",
"type": "string"
},
"name": {
"description": "农事名称",
"type": "string"
},
"period": {
"description": "周期",
"type": "integer"
},
"plantId": {
"type": "string"
}
}
},
"request.CreateComment": { "request.CreateComment": {
"type": "object", "type": "object",
"required": [ "required": [
@@ -2705,6 +3106,56 @@ const docTemplate = `{
} }
} }
}, },
"request.CreateGrowthRecord": {
"type": "object",
"required": [
"plantId"
],
"properties": {
"content": {
"type": "string"
},
"desc": {
"type": "string"
},
"name": {
"type": "string"
},
"ossIds": {
"type": "array",
"items": {
"type": "string"
}
},
"plantId": {
"type": "string"
},
"tag": {
"type": "string"
}
}
},
"request.CreateLevelConf": {
"type": "object",
"properties": {
"level": {
"description": "等级数值",
"type": "integer"
},
"minSunlight": {
"description": "达到该等级所需的最小阳光值",
"type": "integer"
},
"perks": {
"description": "解锁权益描述 (e.g., \"解锁智能诊断\")",
"type": "string"
},
"title": {
"description": "等级称号 (e.g., \"萌芽园丁\")",
"type": "string"
}
}
},
"request.CreateMyPlant": { "request.CreateMyPlant": {
"type": "object", "type": "object",
"properties": { "properties": {
@@ -3132,6 +3583,33 @@ const docTemplate = `{
} }
} }
}, },
"request.UpdateLevelConf": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"level": {
"description": "等级数值",
"type": "integer"
},
"minSunlight": {
"description": "达到该等级所需的最小阳光值",
"type": "integer"
},
"perks": {
"description": "解锁权益描述 (e.g., \"解锁智能诊断\")",
"type": "string"
},
"title": {
"description": "等级称号 (e.g., \"萌芽园丁\")",
"type": "string"
}
}
},
"request.UpdateMyPlant": { "request.UpdateMyPlant": {
"type": "object", "type": "object",
"required": [ "required": [
@@ -3196,6 +3674,26 @@ const docTemplate = `{
} }
} }
}, },
"request.UpdateProfile": {
"type": "object",
"properties": {
"avatarId": {
"type": "string"
},
"currentSunlight": {
"type": "integer"
},
"levelId": {
"type": "string"
},
"nickname": {
"type": "string"
},
"totalSunlight": {
"type": "integer"
}
}
},
"request.UpdateTopic": { "request.UpdateTopic": {
"type": "object", "type": "object",
"required": [ "required": [
+546 -48
View File
@@ -236,6 +236,104 @@
} }
} }
}, },
"/classify/myClassifyLog": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"识别相关"
],
"summary": "我的植物识别记录",
"parameters": [
{
"description": "分页",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/request.PageInfo"
}
}
],
"responses": {
"200": {
"description": "识别记录",
"schema": {
"allOf": [
{
"$ref": "#/definitions/response.Response"
},
{
"type": "object",
"properties": {
"msg": {
"type": "string"
}
}
}
]
}
}
}
}
},
"/classify/plant": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"识别相关"
],
"summary": "base64植物识别",
"parameters": [
{
"type": "file",
"description": "植物识别",
"name": "file",
"in": "formData",
"required": true
}
],
"responses": {
"200": {
"description": "文件OCR",
"schema": {
"allOf": [
{
"$ref": "#/definitions/response.Response"
},
{
"type": "object",
"properties": {
"msg": {
"type": "string"
}
}
}
]
}
}
}
}
},
"/client/delete": { "/client/delete": {
"post": { "post": {
"security": [ "security": [
@@ -488,6 +586,139 @@
} }
} }
}, },
"/config/level/add": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"等级配置"
],
"summary": "添加等级配置",
"parameters": [
{
"description": "添加等级配置",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/request.CreateLevelConf"
}
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"添加成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/config/level/detail": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"produces": [
"application/json"
],
"tags": [
"等级配置"
],
"summary": "等级配置详情",
"parameters": [
{
"type": "string",
"description": "等级配置id",
"name": "id",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"查询成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/config/level/list": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"produces": [
"application/json"
],
"tags": [
"等级配置"
],
"summary": "等级配置列表",
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"查询成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/config/level/update": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"等级配置"
],
"summary": "修改等级配置",
"parameters": [
{
"description": "修改等级配置",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/request.UpdateLevelConf"
}
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"修改成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/menu/delete": { "/menu/delete": {
"get": { "get": {
"security": [ "security": [
@@ -821,54 +1052,6 @@
} }
} }
}, },
"/ocr/base64": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"识别相关"
],
"summary": "base64植物识别",
"parameters": [
{
"type": "file",
"description": "植物识别",
"name": "file",
"in": "formData",
"required": true
}
],
"responses": {
"200": {
"description": "文件OCR",
"schema": {
"allOf": [
{
"$ref": "#/definitions/response.Response"
},
{
"type": "object",
"properties": {
"msg": {
"type": "string"
}
}
}
]
}
}
}
}
},
"/oss/delete": { "/oss/delete": {
"post": { "post": {
"security": [ "security": [
@@ -1247,6 +1430,44 @@
} }
} }
}, },
"/plant/growth/add": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"我的植物"
],
"summary": "添加成长记录",
"parameters": [
{
"description": "添加成长记录",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/request.CreateGrowthRecord"
}
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"添加成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/plant/page": { "/plant/page": {
"post": { "post": {
"security": [ "security": [
@@ -1285,6 +1506,77 @@
} }
} }
}, },
"/plant/plan/add": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"我的植物"
],
"summary": "添加养护事项",
"parameters": [
{
"description": "添加养护事项",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/request.CreateCarePlan"
}
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"添加成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/plant/plan/delete": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"produces": [
"application/json"
],
"tags": [
"我的植物"
],
"summary": "删除养护事项",
"parameters": [
{
"type": "string",
"description": "id",
"name": "id",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"删除成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/plant/todayTask": { "/plant/todayTask": {
"get": { "get": {
"security": [ "security": [
@@ -1542,6 +1834,68 @@
} }
} }
}, },
"/profile/detail": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"produces": [
"application/json"
],
"tags": [
"个人中心"
],
"summary": "用户详情",
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"查询成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/profile/update": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"个人中心"
],
"summary": "修改用户信息",
"parameters": [
{
"description": "修改用户信息",
"name": "data",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/request.UpdateProfile"
}
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"修改成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/role/delete": { "/role/delete": {
"post": { "post": {
"description": "删除角色", "description": "删除角色",
@@ -2204,6 +2558,30 @@
} }
} }
}, },
"/user/info": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"produces": [
"application/json"
],
"tags": [
"用户管理"
],
"summary": "当前登录用户",
"responses": {
"200": {
"description": "{\"code\": 200, \"data\": {}, \"msg\": \"添加成功\"}",
"schema": {
"$ref": "#/definitions/response.Response"
}
}
}
}
},
"/user/save": { "/user/save": {
"post": { "post": {
"security": [ "security": [
@@ -2680,6 +3058,29 @@
} }
} }
}, },
"request.CreateCarePlan": {
"type": "object",
"required": [
"plantId"
],
"properties": {
"icon": {
"description": "icon信息",
"type": "string"
},
"name": {
"description": "农事名称",
"type": "string"
},
"period": {
"description": "周期",
"type": "integer"
},
"plantId": {
"type": "string"
}
}
},
"request.CreateComment": { "request.CreateComment": {
"type": "object", "type": "object",
"required": [ "required": [
@@ -2697,6 +3098,56 @@
} }
} }
}, },
"request.CreateGrowthRecord": {
"type": "object",
"required": [
"plantId"
],
"properties": {
"content": {
"type": "string"
},
"desc": {
"type": "string"
},
"name": {
"type": "string"
},
"ossIds": {
"type": "array",
"items": {
"type": "string"
}
},
"plantId": {
"type": "string"
},
"tag": {
"type": "string"
}
}
},
"request.CreateLevelConf": {
"type": "object",
"properties": {
"level": {
"description": "等级数值",
"type": "integer"
},
"minSunlight": {
"description": "达到该等级所需的最小阳光值",
"type": "integer"
},
"perks": {
"description": "解锁权益描述 (e.g., \"解锁智能诊断\")",
"type": "string"
},
"title": {
"description": "等级称号 (e.g., \"萌芽园丁\")",
"type": "string"
}
}
},
"request.CreateMyPlant": { "request.CreateMyPlant": {
"type": "object", "type": "object",
"properties": { "properties": {
@@ -3124,6 +3575,33 @@
} }
} }
}, },
"request.UpdateLevelConf": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"level": {
"description": "等级数值",
"type": "integer"
},
"minSunlight": {
"description": "达到该等级所需的最小阳光值",
"type": "integer"
},
"perks": {
"description": "解锁权益描述 (e.g., \"解锁智能诊断\")",
"type": "string"
},
"title": {
"description": "等级称号 (e.g., \"萌芽园丁\")",
"type": "string"
}
}
},
"request.UpdateMyPlant": { "request.UpdateMyPlant": {
"type": "object", "type": "object",
"required": [ "required": [
@@ -3188,6 +3666,26 @@
} }
} }
}, },
"request.UpdateProfile": {
"type": "object",
"properties": {
"avatarId": {
"type": "string"
},
"currentSunlight": {
"type": "integer"
},
"levelId": {
"type": "string"
},
"nickname": {
"type": "string"
},
"totalSunlight": {
"type": "integer"
}
}
},
"request.UpdateTopic": { "request.UpdateTopic": {
"type": "object", "type": "object",
"required": [ "required": [
+334 -27
View File
@@ -27,6 +27,22 @@ definitions:
required: required:
- taskId - taskId
type: object type: object
request.CreateCarePlan:
properties:
icon:
description: icon信息
type: string
name:
description: 农事名称
type: string
period:
description: 周期
type: integer
plantId:
type: string
required:
- plantId
type: object
request.CreateComment: request.CreateComment:
properties: properties:
content: content:
@@ -39,6 +55,40 @@ definitions:
- content - content
- postId - postId
type: object type: object
request.CreateGrowthRecord:
properties:
content:
type: string
desc:
type: string
name:
type: string
ossIds:
items:
type: string
type: array
plantId:
type: string
tag:
type: string
required:
- plantId
type: object
request.CreateLevelConf:
properties:
level:
description: 等级数值
type: integer
minSunlight:
description: 达到该等级所需的最小阳光值
type: integer
perks:
description: 解锁权益描述 (e.g., "解锁智能诊断")
type: string
title:
description: 等级称号 (e.g., "萌芽园丁")
type: string
type: object
request.CreateMyPlant: request.CreateMyPlant:
properties: properties:
carePlans: carePlans:
@@ -339,6 +389,25 @@ definitions:
description: 标题 description: 标题
type: string type: string
type: object type: object
request.UpdateLevelConf:
properties:
id:
type: string
level:
description: 等级数值
type: integer
minSunlight:
description: 达到该等级所需的最小阳光值
type: integer
perks:
description: 解锁权益描述 (e.g., "解锁智能诊断")
type: string
title:
description: 等级称号 (e.g., "萌芽园丁")
type: string
required:
- id
type: object
request.UpdateMyPlant: request.UpdateMyPlant:
properties: properties:
carePlans: carePlans:
@@ -384,6 +453,19 @@ definitions:
required: required:
- id - id
type: object type: object
request.UpdateProfile:
properties:
avatarId:
type: string
currentSunlight:
type: integer
levelId:
type: string
nickname:
type: string
totalSunlight:
type: integer
type: object
request.UpdateTopic: request.UpdateTopic:
properties: properties:
end_time: end_time:
@@ -823,6 +905,61 @@ paths:
summary: 小程序登录 summary: 小程序登录
tags: tags:
- 登录相关 - 登录相关
/classify/myClassifyLog:
post:
consumes:
- application/json
parameters:
- description: 分页
in: body
name: data
required: true
schema:
$ref: '#/definitions/request.PageInfo'
produces:
- application/json
responses:
"200":
description: 识别记录
schema:
allOf:
- $ref: '#/definitions/response.Response'
- properties:
msg:
type: string
type: object
security:
- ApiKeyAuth: []
summary: 我的植物识别记录
tags:
- 识别相关
/classify/plant:
post:
consumes:
- multipart/form-data
parameters:
- description: 植物识别
in: formData
name: file
required: true
type: file
produces:
- application/json
responses:
"200":
description: 文件OCR
schema:
allOf:
- $ref: '#/definitions/response.Response'
- properties:
msg:
type: string
type: object
security:
- ApiKeyAuth: []
summary: base64植物识别
tags:
- 识别相关
/client/delete: /client/delete:
post: post:
consumes: consumes:
@@ -965,6 +1102,86 @@ paths:
summary: 更新client summary: 更新client
tags: tags:
- 客户端管理 - 客户端管理
/config/level/add:
post:
consumes:
- application/json
parameters:
- description: 添加等级配置
in: body
name: data
required: true
schema:
$ref: '#/definitions/request.CreateLevelConf'
produces:
- application/json
responses:
"200":
description: '{"success":true,"data":{},"msg":"添加成功"}'
schema:
type: string
security:
- BearerAuth: []
summary: 添加等级配置
tags:
- 等级配置
/config/level/detail:
get:
parameters:
- description: 等级配置id
in: query
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: '{"success":true,"data":{},"msg":"查询成功"}'
schema:
type: string
security:
- BearerAuth: []
summary: 等级配置详情
tags:
- 等级配置
/config/level/list:
get:
produces:
- application/json
responses:
"200":
description: '{"success":true,"data":{},"msg":"查询成功"}'
schema:
type: string
security:
- BearerAuth: []
summary: 等级配置列表
tags:
- 等级配置
/config/level/update:
post:
consumes:
- application/json
parameters:
- description: 修改等级配置
in: body
name: data
required: true
schema:
$ref: '#/definitions/request.UpdateLevelConf'
produces:
- application/json
responses:
"200":
description: '{"success":true,"data":{},"msg":"修改成功"}'
schema:
type: string
security:
- BearerAuth: []
summary: 修改等级配置
tags:
- 等级配置
/menu/delete: /menu/delete:
get: get:
description: 删除menu description: 删除menu
@@ -1151,33 +1368,6 @@ paths:
summary: 更新菜单 summary: 更新菜单
tags: tags:
- 菜单管理 - 菜单管理
/ocr/base64:
post:
consumes:
- multipart/form-data
parameters:
- description: 植物识别
in: formData
name: file
required: true
type: file
produces:
- application/json
responses:
"200":
description: 文件OCR
schema:
allOf:
- $ref: '#/definitions/response.Response'
- properties:
msg:
type: string
type: object
security:
- ApiKeyAuth: []
summary: base64植物识别
tags:
- 识别相关
/oss/delete: /oss/delete:
post: post:
consumes: consumes:
@@ -1398,6 +1588,29 @@ paths:
summary: ById植物详情 summary: ById植物详情
tags: tags:
- 我的植物 - 我的植物
/plant/growth/add:
post:
consumes:
- application/json
parameters:
- description: 添加成长记录
in: body
name: data
required: true
schema:
$ref: '#/definitions/request.CreateGrowthRecord'
produces:
- application/json
responses:
"200":
description: '{"success":true,"data":{},"msg":"添加成功"}'
schema:
type: string
security:
- BearerAuth: []
summary: 添加成长记录
tags:
- 我的植物
/plant/page: /plant/page:
post: post:
consumes: consumes:
@@ -1421,6 +1634,49 @@ paths:
summary: 植物列表 summary: 植物列表
tags: tags:
- 我的植物 - 我的植物
/plant/plan/add:
post:
consumes:
- application/json
parameters:
- description: 添加养护事项
in: body
name: data
required: true
schema:
$ref: '#/definitions/request.CreateCarePlan'
produces:
- application/json
responses:
"200":
description: '{"success":true,"data":{},"msg":"添加成功"}'
schema:
type: string
security:
- BearerAuth: []
summary: 添加养护事项
tags:
- 我的植物
/plant/plan/delete:
get:
parameters:
- description: id
in: query
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: '{"success":true,"data":{},"msg":"删除成功"}'
schema:
type: string
security:
- BearerAuth: []
summary: 删除养护事项
tags:
- 我的植物
/plant/todayTask: /plant/todayTask:
get: get:
consumes: consumes:
@@ -1577,6 +1833,43 @@ paths:
summary: 发布帖子 summary: 发布帖子
tags: tags:
- 帖子 - 帖子
/profile/detail:
get:
produces:
- application/json
responses:
"200":
description: '{"success":true,"data":{},"msg":"查询成功"}'
schema:
type: string
security:
- BearerAuth: []
summary: 用户详情
tags:
- 个人中心
/profile/update:
post:
consumes:
- application/json
parameters:
- description: 修改用户信息
in: body
name: data
required: true
schema:
$ref: '#/definitions/request.UpdateProfile'
produces:
- application/json
responses:
"200":
description: '{"success":true,"data":{},"msg":"修改成功"}'
schema:
type: string
security:
- BearerAuth: []
summary: 修改用户信息
tags:
- 个人中心
/role/delete: /role/delete:
post: post:
consumes: consumes:
@@ -1965,6 +2258,20 @@ paths:
summary: 给用户分配角色 summary: 给用户分配角色
tags: tags:
- 用户管理 - 用户管理
/user/info:
get:
produces:
- application/json
responses:
"200":
description: '{"code": 200, "data": {}, "msg": "添加成功"}'
schema:
$ref: '#/definitions/response.Response'
security:
- ApiKeyAuth: []
summary: 当前登录用户
tags:
- 用户管理
/user/save: /user/save:
post: post:
consumes: consumes:
+1
View File
@@ -53,6 +53,7 @@ func MigrateTable() {
plant.ClassifyRecord{}, //植物识别记录 plant.ClassifyRecord{}, //植物识别记录
plant.LevelConfig{}, //等级配置 plant.LevelConfig{}, //等级配置
plant.UserProfile{}, //用户资料
) )
if err != nil { if err != nil {
+1
View File
@@ -56,6 +56,7 @@ func Routers() {
plantGroup.InitWikiRouter(NeedAuthGroup) //百科 plantGroup.InitWikiRouter(NeedAuthGroup) //百科
plantGroup.InitOcrRouter(NeedAuthGroup) // ocr识别 plantGroup.InitOcrRouter(NeedAuthGroup) // ocr识别
plantGroup.InitLevelConfigRouter(NeedAuthGroup) //等级配置 plantGroup.InitLevelConfigRouter(NeedAuthGroup) //等级配置
plantGroup.InitUserProfileRouter(NeedAuthGroup) //用户资料
} }
+6
View File
@@ -0,0 +1,6 @@
package request
type UpdateProfile struct {
Nickname string `json:"nickname"`
AvatarId string `json:"avatarId"`
}
+1 -1
View File
@@ -8,5 +8,5 @@ type LevelConfig struct {
Level int `json:"level" gorm:"column:level"` // 等级数值 Level int `json:"level" gorm:"column:level"` // 等级数值
Title string `json:"title" gorm:"column:title"` // 等级称号 (e.g., "萌芽园丁") Title string `json:"title" gorm:"column:title"` // 等级称号 (e.g., "萌芽园丁")
MinSunlight int64 `json:"minSunlight" gorm:"column:min_sunlight"` // 达到该等级所需的最小阳光值 MinSunlight int64 `json:"minSunlight" gorm:"column:min_sunlight"` // 达到该等级所需的最小阳光值
Perks string `json:"perks" gorm:"column:column:perks"` // 解锁权益描述 (e.g., "解锁智能诊断") Perks string `json:"perks" gorm:"column:perks"` // 解锁权益描述 (e.g., "解锁智能诊断")
} }
+21
View File
@@ -0,0 +1,21 @@
package plant
import (
"sundynix-go/global"
"sundynix-go/model/system"
)
type UserProfile struct {
global.BaseModel
UserId string `json:"userId" gorm:"index;column:user_id"`
Nickname string `json:"nickname" gorm:"column:nick_name"`
AvatarId string `json:"avatarId" gorm:"column:avatar_id"`
LevelId string `json:"levelId" gorm:"column:level_id"` // 当前等级id
CurrentSunlight int64 `json:"currentSunlight" gorm:"column:current_sunlight"` // 当前持有阳光值 (可消耗)
TotalSunlight int64 `json:"totalSunlight" gorm:"column:total_sunlight"` // 历史累计阳光值 (用于计算等级)
PlantCount int64 `json:"plantCount" gorm:"column:plant_count"`
CareCount int64 `json:"careCount" gorm:"column:care_count"`
PostCount int64 `json:"postCount" gorm:"column:post_count"`
Avatar *system.Oss `json:"avatar" gorm:"foreignKey:AvatarId"`
Level *LevelConfig `json:"level" gorm:"foreignKey:LevelId"`
}
+2 -1
View File
@@ -8,7 +8,8 @@ type Menu struct {
Category int `json:"category" form:"category"` Category int `json:"category" form:"category"`
Name string `gorm:"size:20" json:"name" form:"name"` Name string `gorm:"size:20" json:"name" form:"name"`
Title string `gorm:"size:20" json:"title" form:"title"` Title string `gorm:"size:20" json:"title" form:"title"`
Code string `gorm:"size:20" json:"code" form:"code"` Code string `gorm:"size:50" json:"code" form:"code"`
Path string `gorm:"size:100" json:"path" form:"path"`
Permission string `gorm:"size:20" json:"permission" form:"permission"` Permission string `gorm:"size:20" json:"permission" form:"permission"`
Locale string `gorm:"size:50" json:"locale" form:"locale"` Locale string `gorm:"size:50" json:"locale" form:"locale"`
Icon string `gorm:"size:20" json:"icon" form:"icon"` Icon string `gorm:"size:20" json:"icon" form:"icon"`
+2
View File
@@ -10,6 +10,7 @@ type RouterGroup struct {
WikiRouter WikiRouter
OcrRouter OcrRouter
LevelConfigRouter LevelConfigRouter
UserProfileRouter
} }
// 初始化路由 // 初始化路由
@@ -21,4 +22,5 @@ var (
wikiApi = v1.ApiGroupApp.PlantApiGroup.WikiApi wikiApi = v1.ApiGroupApp.PlantApiGroup.WikiApi
ocrApi = v1.ApiGroupApp.PlantApiGroup.OcrApi ocrApi = v1.ApiGroupApp.PlantApiGroup.OcrApi
levelConfigApi = v1.ApiGroupApp.PlantApiGroup.LevelConfigApi levelConfigApi = v1.ApiGroupApp.PlantApiGroup.LevelConfigApi
userProfileApi = v1.ApiGroupApp.PlantApiGroup.UserProfileApi
) )
+14
View File
@@ -0,0 +1,14 @@
package plant
import "github.com/gin-gonic/gin"
type UserProfileRouter struct{}
func (c *OcrRouter) InitUserProfileRouter(Router *gin.RouterGroup) {
userProfileRouter := Router.Group("profile")
{
userProfileRouter.POST("/update", userProfileApi.UpdateProfile)
userProfileRouter.GET("/detail", userProfileApi.ProfileDetail)
}
}
+1
View File
@@ -8,4 +8,5 @@ type ServiceGroup struct {
WikiService WikiService
OcrService OcrService
LevelConfigService LevelConfigService
UserProfileService
} }
+29
View File
@@ -0,0 +1,29 @@
package plant
import (
"sundynix-go/global"
"sundynix-go/model/plant"
plantReq "sundynix-go/model/plant/request"
)
type UserProfileService struct{}
// UpdateProfile 修改用户信息
func (s *UserProfileService) UpdateProfile(req plantReq.UpdateProfile, userId string) error {
updateMap := map[string]interface{}{
"nick_name": req.Nickname,
"avatar_id": req.AvatarId,
}
return global.DB.Model(&plant.UserProfile{}).Where("user_id = ?", userId).Updates(updateMap).Error
}
// ProfileDetail 获取用户详情
func (s *UserProfileService) ProfileDetail(userId string) (plant.UserProfile, error) {
var res plant.UserProfile
err := global.DB.Where("user_id = ?", userId).Preload("Avatar").Preload("Level").First(&res).Error
if err != nil {
return res, err
}
return res, nil
}
+1
View File
@@ -27,6 +27,7 @@ func (s *MenuService) UpdateMenu(menu *system.Menu) (err error) {
"Name": menu.Name, "Name": menu.Name,
"Title": menu.Title, "Title": menu.Title,
"Code": menu.Code, "Code": menu.Code,
"path": menu.Path,
"Permission": menu.Permission, "Permission": menu.Permission,
"Locale": menu.Locale, "Locale": menu.Locale,
"Icon": menu.Icon, "Icon": menu.Icon,
+13 -13
View File
@@ -12,6 +12,7 @@ import (
"strconv" "strconv"
"sundynix-go/global" "sundynix-go/global"
common "sundynix-go/model/commom/request" common "sundynix-go/model/commom/request"
"sundynix-go/model/plant"
"sundynix-go/model/system" "sundynix-go/model/system"
systemReq "sundynix-go/model/system/request" systemReq "sundynix-go/model/system/request"
systemResp "sundynix-go/model/system/response" systemResp "sundynix-go/model/system/response"
@@ -157,19 +158,18 @@ func (userService *UserService) MiniLogin(code string) (result *system.User, err
if err := tx.Create(&newUser).Error; err != nil { if err := tx.Create(&newUser).Error; err != nil {
return err return err
} }
//// 归一化到当天的0点(本地时区) profile := plant.UserProfile{
//now := time.Now() UserId: newUser.Id,
//today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local) Nickname: newUser.Name,
//personal := plant.Personal{ CurrentSunlight: 0,
// UserId: newUser.Id, TotalSunlight: 0,
// JoinDate: today, PlantCount: 0,
// PlantCount: 0, CareCount: 0,
// CareCount: 0, PostCount: 0,
// BadgeCount: 0, }
//} if err := tx.Create(&profile).Error; err != nil {
//if err := tx.Create(&personal).Error; err != nil { return err
// return err }
//}
// 赋值给外部变量以便返回 // 赋值给外部变量以便返回
user = newUser user = newUser
return nil return nil