package api import ( "context" "encoding/json" "strconv" "next-terminal/server/common/maps" "next-terminal/server/dto" "next-terminal/server/model" "next-terminal/server/repository" "next-terminal/server/utils" "github.com/labstack/echo/v4" ) type WebsiteApi struct{} func (api WebsiteApi) AllEndpoint(c echo.Context) error { items, err := repository.WebsiteRepository.FindAll(context.TODO()) if err != nil { return err } return Success(c, items) } func (api WebsiteApi) PagingEndpoint(c echo.Context) error { pageIndex, _ := strconv.Atoi(c.QueryParam("pageIndex")) pageSize, _ := strconv.Atoi(c.QueryParam("pageSize")) keyword := c.QueryParam("keyword") items, total, err := repository.WebsiteRepository.Find(context.TODO(), pageIndex, pageSize, keyword) if err != nil { return err } return Success(c, maps.Map{ "total": total, "items": items, }) } func serializeJSON(v interface{}) string { if v == nil { return "" } switch val := v.(type) { case string: return val case []interface{}, map[string]interface{}: bytes, err := json.Marshal(val) if err != nil { return "" } return string(bytes) default: bytes, err := json.Marshal(val) if err != nil { return "" } return string(bytes) } } func (api WebsiteApi) CreateEndpoint(c echo.Context) error { var req dto.WebsiteDTO if err := c.Bind(&req); err != nil { return err } item := &model.Website{ ID: utils.UUID(), Name: req.Name, Enabled: req.Enabled, TargetUrl: req.TargetUrl, TargetHost: req.TargetHost, TargetPort: req.TargetPort, Domain: req.Domain, AsciiDomain: req.AsciiDomain, Entrance: req.Entrance, Description: req.Description, Status: req.Status, StatusText: req.StatusText, GatewayType: req.GatewayType, GatewayId: req.GatewayId, BasicAuth: serializeJSON(req.BasicAuth), Headers: serializeJSON(req.Headers), Cert: serializeJSON(req.Cert), Public: serializeJSON(req.Public), TempAllow: serializeJSON(req.TempAllow), GroupId: req.GroupId, Sort: req.Sort, } if err := repository.WebsiteRepository.Create(context.TODO(), item); err != nil { return err } return Success(c, "") } func (api WebsiteApi) UpdateEndpoint(c echo.Context) error { id := c.Param("id") var req dto.WebsiteDTO if err := c.Bind(&req); err != nil { return err } item := &model.Website{ ID: id, Name: req.Name, Enabled: req.Enabled, TargetUrl: req.TargetUrl, TargetHost: req.TargetHost, TargetPort: req.TargetPort, Domain: req.Domain, AsciiDomain: req.AsciiDomain, Entrance: req.Entrance, Description: req.Description, Status: req.Status, StatusText: req.StatusText, GatewayType: req.GatewayType, GatewayId: req.GatewayId, BasicAuth: serializeJSON(req.BasicAuth), Headers: serializeJSON(req.Headers), Cert: serializeJSON(req.Cert), Public: serializeJSON(req.Public), TempAllow: serializeJSON(req.TempAllow), GroupId: req.GroupId, Sort: req.Sort, } if err := repository.WebsiteRepository.UpdateById(context.TODO(), item, id); err != nil { return err } return Success(c, nil) } func (api WebsiteApi) DeleteEndpoint(c echo.Context) error { id := c.Param("id") if err := repository.WebsiteRepository.DeleteById(context.TODO(), id); err != nil { return err } return Success(c, nil) } func (api WebsiteApi) GetEndpoint(c echo.Context) error { id := c.Param("id") item, err := repository.WebsiteRepository.FindById(context.TODO(), id) if err != nil { return err } return Success(c, item) } func (api WebsiteApi) GroupsGetEndpoint(c echo.Context) error { return Success(c, []interface{}{}) } func (api WebsiteApi) GroupsSetEndpoint(c echo.Context) error { return Success(c, nil) } func (api WebsiteApi) GroupsDeleteEndpoint(c echo.Context) error { return Success(c, nil) } func (api WebsiteApi) ChangeGroupEndpoint(c echo.Context) error { return Success(c, nil) } func (api WebsiteApi) ChangeGatewayEndpoint(c echo.Context) error { return Success(c, nil) } func (api WebsiteApi) SortEndpoint(c echo.Context) error { return Success(c, nil) } func (api WebsiteApi) FaviconEndpoint(c echo.Context) error { return Success(c, "") }