12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package mappers
- import (
- "sort"
- "git.dmitriygnatenko.ru/dima/homethings/internal/dto"
- "git.dmitriygnatenko.ru/dima/homethings/internal/models"
- )
- func ToAddThingRequest(req dto.AddThingRequest) models.AddThingRequest {
- return models.AddThingRequest{
- Title: req.Title,
- Description: req.Description,
- }
- }
- func ToUpdateThingRequest(id uint64, req dto.UpdateThingRequest) models.UpdateThingRequest {
- return models.UpdateThingRequest{
- ID: id,
- Title: req.Title,
- Description: req.Description,
- }
- }
- func ToAddPlaceThingRequest(thingID uint64, placeID uint64) models.AddPlaceThingRequest {
- return models.AddPlaceThingRequest{
- PlaceID: placeID,
- ThingID: thingID,
- }
- }
- func ToUpdatePlaceThingRequest(thingID uint64, placeID uint64) models.UpdatePlaceThingRequest {
- return models.UpdatePlaceThingRequest{
- ThingID: thingID,
- PlaceID: placeID,
- }
- }
- func ToThingResponse(req models.Thing) dto.ThingResponse {
- return dto.ThingResponse{
- ID: req.ID,
- PlaceID: req.PlaceID,
- Title: req.Title,
- Description: req.Description,
- CreatedAt: req.CreatedAt.Format(defaultDateTimeLayout),
- UpdatedAt: req.UpdatedAt.Format(defaultDateTimeLayout),
- }
- }
- func ToThingsResponse(things []models.Thing) dto.ThingsResponse {
- res := make([]dto.ThingResponse, 0, len(things))
- for _, thing := range things {
- res = append(res, ToThingResponse(thing))
- }
- return dto.ThingsResponse{Things: res}
- }
- func ToThingsExtResponse(things []models.Thing, tags []models.ThingTag) dto.ThingsExtResponse {
- res := make([]dto.ThingExtResponse, 0, len(things))
- groupedTags := make(map[uint64][]dto.TagResponse)
- for _, tag := range tags {
- if _, ok := groupedTags[tag.ThingID]; !ok {
- groupedTags[tag.ThingID] = make([]dto.TagResponse, 0)
- }
- groupedTags[tag.ThingID] = append(groupedTags[tag.ThingID], ThingTagToTagResponse(tag))
- }
- for _, thing := range things {
- var thingTags []dto.TagResponse
- if t, ok := groupedTags[thing.ID]; ok {
- sort.Slice(t, func(i, j int) bool {
- return t[i].Title < t[j].Title
- })
- thingTags = t
- }
- res = append(res, dto.ThingExtResponse{
- ThingResponse: ToThingResponse(thing),
- Tags: thingTags,
- })
- }
- return dto.ThingsExtResponse{Things: res}
- }
|