Add settings/type routes and handlers
This commit is contained in:
parent
6d41a778b3
commit
afaf43dde1
|
@ -137,6 +137,14 @@ func main() {
|
||||||
{
|
{
|
||||||
statisticRoute.GET("/type", handlers.StatisticsGetAllSpendingsForTypes)
|
statisticRoute.GET("/type", handlers.StatisticsGetAllSpendingsForTypes)
|
||||||
}
|
}
|
||||||
|
settingsGroup := api.Group("/settings", middleware.AuthMiddleware())
|
||||||
|
{
|
||||||
|
typeRoutes := settingsGroup.Group("/type")
|
||||||
|
{
|
||||||
|
typeRoutes.GET("/all", handlers.SettingsTypeFilterGetAll)
|
||||||
|
typeRoutes.PUT("/update", handlers.SettingsTypePutBatch)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||||
|
|
122
handlers/settings_type.go
Normal file
122
handlers/settings_type.go
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
package handlers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"git.qowevisa.me/Qowevisa/fin-check-api/db"
|
||||||
|
"git.qowevisa.me/Qowevisa/fin-check-api/types"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
var settingsTypeFilterTransform func(inp *db.SettingsTypeFilter) types.SettingsTypeFilter = func(inp *db.SettingsTypeFilter) types.SettingsTypeFilter {
|
||||||
|
return types.SettingsTypeFilter{
|
||||||
|
TypeID: inp.TypeID,
|
||||||
|
FilterThis: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Summary Get all settingstypefilters for user
|
||||||
|
// @Description Get all settingstypefilters for user
|
||||||
|
// @Tags type
|
||||||
|
// @Produce json
|
||||||
|
// @Param Authorization header string true "Bearer token"
|
||||||
|
// @Success 200 {object} []types.SettingsTypeFilter
|
||||||
|
// @Failure 401 {object} types.ErrorResponse
|
||||||
|
// @Failure 500 {object} types.ErrorResponse
|
||||||
|
// @Security ApiKeyAuth
|
||||||
|
// @Router /settings/type/all [get]
|
||||||
|
func SettingsTypeFilterGetAll(c *gin.Context) {
|
||||||
|
userID, err := GetUserID(c)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(500, types.ErrorResponse{Message: err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dbc := db.Connect()
|
||||||
|
var entities []*db.SettingsTypeFilter
|
||||||
|
if err := dbc.Find(&entities, db.SettingsTypeFilter{UserID: userID}).Error; err != nil {
|
||||||
|
c.JSON(500, types.ErrorResponse{Message: err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var ret []types.SettingsTypeFilter
|
||||||
|
for _, entity := range entities {
|
||||||
|
ret = append(ret, settingsTypeFilterTransform(entity))
|
||||||
|
}
|
||||||
|
c.JSON(200, ret)
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Summary Get all settingstypefilters for user
|
||||||
|
// @Description Get all settingstypefilters for user
|
||||||
|
// @Tags type
|
||||||
|
// @Produce json
|
||||||
|
// @Param Authorization header string true "Bearer token"
|
||||||
|
// @Success 200 {object} []types.SettingsTypeFilter
|
||||||
|
// @Failure 401 {object} types.ErrorResponse
|
||||||
|
// @Failure 500 {object} types.ErrorResponse
|
||||||
|
// @Security ApiKeyAuth
|
||||||
|
// @Router /settings/type/update [put]
|
||||||
|
func SettingsTypePutBatch(c *gin.Context) {
|
||||||
|
userID, err := GetUserID(c)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(500, types.ErrorResponse{Message: err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var updates []types.SettingsTypeFilter
|
||||||
|
if err := c.ShouldBindJSON(&updates); err != nil {
|
||||||
|
log.Printf("err is %v\n", err)
|
||||||
|
c.JSON(400, types.ErrorResponse{Message: "Invalid request"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
dbc := db.Connect()
|
||||||
|
var entities []*db.SettingsTypeFilter
|
||||||
|
if err := dbc.Find(&entities, db.SettingsTypeFilter{UserID: userID}).Error; err != nil {
|
||||||
|
c.JSON(500, types.ErrorResponse{Message: err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var removeFilters []*db.SettingsTypeFilter
|
||||||
|
for _, typeFilter := range entities {
|
||||||
|
skipTypeFilter := false
|
||||||
|
for _, updateTypeFilter := range updates {
|
||||||
|
if typeFilter.TypeID == updateTypeFilter.TypeID {
|
||||||
|
if updateTypeFilter.FilterThis == false {
|
||||||
|
removeFilters = append(removeFilters, typeFilter)
|
||||||
|
}
|
||||||
|
skipTypeFilter = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if skipTypeFilter {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, potentiallyNewFilter := range updates {
|
||||||
|
wasItHandled := false
|
||||||
|
for _, handled := range removeFilters {
|
||||||
|
if handled.TypeID == potentiallyNewFilter.TypeID {
|
||||||
|
wasItHandled = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if wasItHandled {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
newFilter := &db.SettingsTypeFilter{
|
||||||
|
TypeID: potentiallyNewFilter.TypeID,
|
||||||
|
UserID: userID,
|
||||||
|
}
|
||||||
|
if err := dbc.Create(newFilter).Error; err != nil {
|
||||||
|
log.Printf("dbc.Create error: %v\n", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, settingsDelete := range removeFilters {
|
||||||
|
if err := dbc.Unscoped().Delete(settingsDelete).Error; err != nil {
|
||||||
|
log.Printf("dbc.Delete:ERROR: %v\n", err)
|
||||||
|
c.JSON(500, types.ErrorResponse{Message: err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
c.JSON(200, types.Message{Info: "It was successfull"})
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user