u
This commit is contained in:
1 parent
46106d0c76
commit
34240d2e16
36 files changed
+2853
-165
No files matched your search
@@ -0,0 +1,200 @@
|
||||
package finance
|
||||
|
||||
import (
|
||||
"allapp/api/router/middleware"
|
||||
"allapp/api/types"
|
||||
"allapp/db"
|
||||
"allapp/db/repo"
|
||||
"allapp/utils/errorx"
|
||||
"allapp/utils/requestx"
|
||||
"allapp/utils/responsex"
|
||||
"allapp/utils/uniqueid"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
)
|
||||
|
||||
// ListFinanceCategories 查看记账分类
|
||||
func ListFinanceCategories(c fiber.Ctx) error {
|
||||
spaceId, err := middleware.GetSpaceID(c)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
categories, err := db.Queries.ListFinanceCategories(c.Context(), spaceId)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
financeCategories := make([]types.FinanceCategory, 0, len(categories))
|
||||
|
||||
for _, category := range categories {
|
||||
financeCategories = append(financeCategories, types.FinanceCategory{
|
||||
Id: category.ID,
|
||||
Name: category.Name,
|
||||
Icon: category.Icon,
|
||||
Type: category.Type,
|
||||
SortNumber: category.SortNumber,
|
||||
})
|
||||
}
|
||||
|
||||
vo := new(types.ListFinanceCategoriesVO)
|
||||
vo.Categories = financeCategories
|
||||
|
||||
return responsex.OK(c, vo)
|
||||
}
|
||||
|
||||
// CreateFinanceCategory 新建分类
|
||||
func CreateFinanceCategory(c fiber.Ctx) error {
|
||||
dto := new(types.CreateFinanceCategoryDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userId, err := middleware.GetUserID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
spaceID, err2 := middleware.GetSpaceID(c)
|
||||
if err2 != nil {
|
||||
return err2
|
||||
}
|
||||
|
||||
_, err = db.Queries.GetFinanceCategoryByName(c.Context(), repo.GetFinanceCategoryByNameParams{
|
||||
SpaceID: spaceID,
|
||||
Name: dto.Name,
|
||||
Type: dto.Type,
|
||||
})
|
||||
|
||||
isFound := true
|
||||
|
||||
if err != nil {
|
||||
if errorx.IsNotFound(err) {
|
||||
isFound = false
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if isFound {
|
||||
return responsex.Error(c, "分类名称不能重复")
|
||||
}
|
||||
|
||||
nextId := uniqueid.NextId()
|
||||
|
||||
err = db.Queries.InsertFinanceCategory(c.Context(), repo.InsertFinanceCategoryParams{
|
||||
ID: nextId,
|
||||
SpaceID: spaceID,
|
||||
Name: dto.Name,
|
||||
Icon: dto.Icon,
|
||||
Type: dto.Type,
|
||||
SortNumber: dto.SortNumber,
|
||||
CreateBy: userId,
|
||||
UpdateBy: userId,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
vo := new(types.CreateFinanceCategoryVO)
|
||||
vo.Id = nextId
|
||||
|
||||
return responsex.OK(c, vo)
|
||||
}
|
||||
|
||||
// UpdateFinanceCategorySortNumber 更新记账分类顺序
|
||||
func UpdateFinanceCategorySortNumber(c fiber.Ctx) error {
|
||||
dto := new(types.UpdateFinanceCategorySortDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userId, err := middleware.GetUserID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 组装批量更新参数
|
||||
params := make([]repo.BatchUpdateFinanceCategorySortNumberParams, 0, len(dto.Categories))
|
||||
for _, datum := range dto.Categories {
|
||||
params = append(params, repo.BatchUpdateFinanceCategorySortNumberParams{
|
||||
ID: datum.Id,
|
||||
SortNumber: datum.SortNumber,
|
||||
UpdateBy: userId,
|
||||
})
|
||||
}
|
||||
|
||||
// 使用统一事务封装
|
||||
err = db.WithTx(c.Context(), func(q *repo.Queries) error {
|
||||
batch := q.BatchUpdateFinanceCategorySortNumber(c.Context(), params)
|
||||
|
||||
if err := db.RunBatch(c.Context(), batch); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return responsex.OK(c, nil)
|
||||
}
|
||||
|
||||
// DeleteFinanceCategory 删除记账分类
|
||||
func DeleteFinanceCategory(c fiber.Ctx) error {
|
||||
dto := new(types.DeleteFinanceCategoryDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err := db.WithTx(c.Context(), func(q *repo.Queries) error {
|
||||
err := q.DeleteFinanceCategory(c.Context(), dto.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = q.DeleteFinanceRecordByCategoryId(c.Context(), dto.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return responsex.OK(c, nil)
|
||||
}
|
||||
|
||||
// UpdateFinanceCategory 更新记账分类
|
||||
func UpdateFinanceCategory(c fiber.Ctx) error {
|
||||
dto := new(types.UpdateFinanceCategoryDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userId, err := middleware.GetUserID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = db.Queries.UpdateFinanceCategory(c.Context(), repo.UpdateFinanceCategoryParams{
|
||||
ID: dto.Id,
|
||||
Name: dto.Name,
|
||||
Icon: dto.Icon,
|
||||
UpdateBy: userId,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return responsex.OK(c, nil)
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
package finance
|
||||
|
||||
import (
|
||||
"allapp/api/router/middleware"
|
||||
"allapp/api/types"
|
||||
"allapp/db"
|
||||
"allapp/db/repo"
|
||||
"allapp/utils/pgtypex"
|
||||
"allapp/utils/requestx"
|
||||
"allapp/utils/responsex"
|
||||
"allapp/utils/timex"
|
||||
"allapp/utils/uniqueid"
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
)
|
||||
|
||||
// ListFinanceRecords 记账记录
|
||||
func ListFinanceRecords(c fiber.Ctx) error {
|
||||
dto := new(types.ListFinanceRecordsDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
spaceID, err := middleware.GetSpaceID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 解析年月(yyyy-MM)
|
||||
startTime, err := timex.ParseTimeFlexible(dto.StartTime)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
endTime, err := timex.ParseTimeFlexible(dto.EndTime)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 开始时间兜底
|
||||
if startTime == nil {
|
||||
t := time.Unix(0, 0)
|
||||
startTime = &t
|
||||
}
|
||||
|
||||
// 结束时间兜底
|
||||
if endTime == nil {
|
||||
t := time.Now().AddDate(10, 0, 0)
|
||||
endTime = &t
|
||||
}
|
||||
|
||||
categoryId := dto.CategoryId
|
||||
|
||||
records, err := db.Queries.ListFinanceRecords(c.Context(), repo.ListFinanceRecordsParams{
|
||||
SpaceID: spaceID,
|
||||
RecordTime: pgtypex.TimePtrToPgDate(startTime),
|
||||
RecordTime_2: pgtypex.TimePtrToPgDate(endTime),
|
||||
Column4: categoryId,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
financeRecords := make([]types.FinanceRecord, 0, len(records))
|
||||
|
||||
for _, record := range records {
|
||||
financeRecords = append(financeRecords, types.FinanceRecord{
|
||||
Id: record.ID,
|
||||
CategoryId: record.CategoryID,
|
||||
Amount: pgtypex.NumericToString(record.Amount),
|
||||
Remark: pgtypex.TextToString(record.Remark),
|
||||
RecordTime: pgtypex.DateToString(record.RecordTime),
|
||||
MemberId: record.UpdateBy,
|
||||
MemberName: pgtypex.TextToString(record.MemberName),
|
||||
})
|
||||
}
|
||||
|
||||
vo := new(types.ListFinanceRecordsVO)
|
||||
vo.Records = financeRecords
|
||||
|
||||
return responsex.OK(c, vo)
|
||||
}
|
||||
|
||||
// CreateFinanceRecord 新增记账记录
|
||||
func CreateFinanceRecord(c fiber.Ctx) error {
|
||||
dto := new(types.CreateFinanceRecordDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
spaceID, err := middleware.GetSpaceID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userID, err := middleware.GetUserID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = db.Queries.InsertFinanceRecord(c.Context(), repo.InsertFinanceRecordParams{
|
||||
ID: uniqueid.NextId(),
|
||||
SpaceID: spaceID,
|
||||
CategoryID: dto.CategoryId,
|
||||
Amount: pgtypex.StringToNumeric(dto.Amount),
|
||||
RecordTime: pgtypex.StringToDate(dto.RecordTime),
|
||||
Remark: pgtypex.StringToText(dto.Remark),
|
||||
CreateBy: userID,
|
||||
UpdateBy: userID,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return responsex.OK(c, nil)
|
||||
}
|
||||
|
||||
// UpdateFinanceRecord 更新记账记录
|
||||
func UpdateFinanceRecord(c fiber.Ctx) error {
|
||||
dto := new(types.UpdateFinanceRecordDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userID, err := middleware.GetUserID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = db.Queries.UpdateFinanceRecord(c.Context(), repo.UpdateFinanceRecordParams{
|
||||
ID: uniqueid.NextId(),
|
||||
CategoryID: dto.CategoryId,
|
||||
Amount: pgtypex.StringToNumeric(dto.Amount),
|
||||
Remark: pgtypex.StringToText(dto.Remark),
|
||||
RecordTime: pgtypex.StringToDate(dto.RecordTime),
|
||||
UpdateBy: userID,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return responsex.OK(c, nil)
|
||||
}
|
||||
|
||||
// DeleteFinanceRecord 删除记账记录
|
||||
func DeleteFinanceRecord(c fiber.Ctx) error {
|
||||
dto := new(types.DeleteFinanceRecordDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err := db.Queries.DeleteFinanceRecord(c.Context(), dto.Id)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return responsex.OK(c, nil)
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
package space
|
||||
|
||||
import (
|
||||
"allapp/api/router/middleware"
|
||||
"allapp/api/types"
|
||||
"allapp/db"
|
||||
"allapp/db/repo"
|
||||
"allapp/utils/requestx"
|
||||
"allapp/utils/responsex"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
)
|
||||
|
||||
// UpdateSpaceDefault 更新空间默认情况
|
||||
func UpdateSpaceDefault(c fiber.Ctx) error {
|
||||
dto := new(types.UpdateSpaceIsDefaultDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userId, err := middleware.GetUserID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = db.WithTx(c.Context(), func(q *repo.Queries) error {
|
||||
err = q.UpdateSpaceIsDefault(c.Context(), repo.UpdateSpaceIsDefaultParams{
|
||||
SpaceID: dto.SpaceId,
|
||||
UserID: userId,
|
||||
IsDefault: dto.IsDefault,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var otherDefault int16
|
||||
|
||||
if dto.IsDefault == 1 {
|
||||
otherDefault = 0
|
||||
}
|
||||
|
||||
err = q.UpdateOtherSpacesIsDefault(c.Context(), repo.UpdateOtherSpacesIsDefaultParams{
|
||||
IsDefault: otherDefault,
|
||||
UserID: userId,
|
||||
SpaceID: dto.SpaceId,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return responsex.OK(c, "更新成功")
|
||||
}
|
||||
|
||||
// UpdateMemberName 更新群成员名称
|
||||
func UpdateMemberName(c fiber.Ctx) error {
|
||||
dto := new(types.UpdateMemberNameDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userId, err := middleware.GetUserID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = db.Queries.UpdateSpaceMemberName(c.Context(), repo.UpdateSpaceMemberNameParams{
|
||||
SpaceID: dto.SpaceId,
|
||||
UserID: userId,
|
||||
MemberName: dto.MemberName,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return responsex.OK(c, "更新成功")
|
||||
}
|
||||
|
||||
// UpdateSpaceSortNumber 更新空间排序
|
||||
func UpdateSpaceSortNumber(c fiber.Ctx) error {
|
||||
dto := new(types.UpdateSpaceSortNumberDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userId, err := middleware.GetUserID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 组装批量更新参数
|
||||
params := make([]repo.BatchUpdateSpaceSortNumberParams, 0, len(dto.Spaces))
|
||||
|
||||
for _, datum := range dto.Spaces {
|
||||
params = append(params, repo.BatchUpdateSpaceSortNumberParams{
|
||||
SortNumber: datum.SortNumber,
|
||||
SpaceID: datum.SpaceId,
|
||||
UserID: userId,
|
||||
})
|
||||
}
|
||||
|
||||
// 使用统一事务封装
|
||||
err = db.WithTx(c.Context(), func(q *repo.Queries) error {
|
||||
batch := q.BatchUpdateSpaceSortNumber(c.Context(), params)
|
||||
|
||||
if err := db.RunBatch(c.Context(), batch); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return responsex.OK(c, "更新成功")
|
||||
}
|
||||
-115
@@ -228,80 +228,6 @@ func ExitSpace(c fiber.Ctx) error {
|
||||
return responsex.OK(c, "空间已成功退出")
|
||||
}
|
||||
|
||||
// UpdateMemberName 更新群成员名称
|
||||
func UpdateMemberName(c fiber.Ctx) error {
|
||||
dto := new(types.UpdateMemberNameDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userId, err := middleware.GetUserID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = db.Queries.UpdateSpaceMemberName(c.Context(), repo.UpdateSpaceMemberNameParams{
|
||||
SpaceID: dto.SpaceId,
|
||||
UserID: userId,
|
||||
MemberName: dto.MemberName,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return responsex.OK(c, "更新成功")
|
||||
}
|
||||
|
||||
// UpdateSpaceDefault 更新空间默认情况
|
||||
func UpdateSpaceDefault(c fiber.Ctx) error {
|
||||
dto := new(types.UpdateSpaceIsDefaultDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userId, err := middleware.GetUserID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = db.WithTx(c.Context(), func(q *repo.Queries) error {
|
||||
err = q.UpdateSpaceIsDefault(c.Context(), repo.UpdateSpaceIsDefaultParams{
|
||||
SpaceID: dto.SpaceId,
|
||||
UserID: userId,
|
||||
IsDefault: dto.IsDefault,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var otherDefault int16
|
||||
|
||||
if dto.IsDefault == 1 {
|
||||
otherDefault = 0
|
||||
}
|
||||
|
||||
err = q.UpdateOtherSpacesIsDefault(c.Context(), repo.UpdateOtherSpacesIsDefaultParams{
|
||||
IsDefault: otherDefault,
|
||||
UserID: userId,
|
||||
SpaceID: dto.SpaceId,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return responsex.OK(c, "更新成功")
|
||||
}
|
||||
|
||||
// UpdateSpaceName 更新空间名称
|
||||
func UpdateSpaceName(c fiber.Ctx) error {
|
||||
dto := new(types.UpdateSpaceNameDTO)
|
||||
@@ -381,47 +307,6 @@ func GetSpaceSettings(c fiber.Ctx) error {
|
||||
return responsex.OK(c, vo)
|
||||
}
|
||||
|
||||
// UpdateSpaceSortNumber 更新空间排序
|
||||
func UpdateSpaceSortNumber(c fiber.Ctx) error {
|
||||
dto := new(types.UpdateSpaceSortNumberDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userId, err := middleware.GetUserID(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 组装批量更新参数
|
||||
params := make([]repo.BatchUpdateSpaceSortNumberParams, 0, len(dto.Spaces))
|
||||
|
||||
for _, datum := range dto.Spaces {
|
||||
params = append(params, repo.BatchUpdateSpaceSortNumberParams{
|
||||
SortNumber: datum.SortNumber,
|
||||
SpaceID: datum.SpaceId,
|
||||
UserID: userId,
|
||||
})
|
||||
}
|
||||
|
||||
// 使用统一事务封装
|
||||
err = db.WithTx(c.Context(), func(q *repo.Queries) error {
|
||||
batch := q.BatchUpdateSpaceSortNumber(c.Context(), params)
|
||||
|
||||
if err := db.RunBatch(c.Context(), batch); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return responsex.OK(c, "更新成功")
|
||||
}
|
||||
|
||||
func ListSpaceMembers(c fiber.Ctx) error {
|
||||
dto := new(types.ListSpaceMembersDTO)
|
||||
if err := requestx.BindAndValidate(c, dto); err != nil {
|
||||
Reference in new issue
Block a user