Files
evening_detective_server/internal/app/story_mapper.go
T
2026-07-26 00:20:58 +07:00

171 lines
4.0 KiB
Go

package app
import (
"evening_detective_server/internal/modules/formatter_utils"
"evening_detective_server/internal/modules/storytelling"
"evening_detective_server/internal/services/scenarios_service"
proto "evening_detective_server/proto"
"google.golang.org/protobuf/types/known/timestamppb"
)
func mapScenarios(o []*scenarios_service.Scenario) []*proto.Scenario {
res := make([]*proto.Scenario, 0, len(o))
for _, item := range o {
res = append(res, mapScenario(item))
}
return res
}
func mapScenario(o *scenarios_service.Scenario) *proto.Scenario {
var publishedAt *timestamppb.Timestamp
if o.PublishedAt != nil {
publishedAt = timestamppb.New(*o.PublishedAt)
}
return &proto.Scenario{
Id: int32(o.ID),
Name: o.Name,
Description: o.Description,
Image: o.Image,
Story: mapStory(o.Story),
Author: mapUser(o.Author),
Status: o.Status,
UpdatedAt: timestamppb.New(o.UpdatedAt),
CreatedAt: timestamppb.New(o.CreatedAt),
PublishedAt: publishedAt,
}
}
func mapStory(o *storytelling.Story) *proto.Story {
if o == nil {
return nil
}
return &proto.Story{
Places: mapPlaces(o.Places),
}
}
func mapPlaces(o []*storytelling.Place) []*proto.Place {
res := make([]*proto.Place, 0, len(o))
for _, item := range o {
res = append(res, mapPlace(item))
}
return res
}
func mapPlace(o *storytelling.Place) *proto.Place {
return &proto.Place{
Code: o.Code,
Name: o.Name,
Text: o.Text,
Image: o.Image,
Hidden: o.Hidden,
Applications: mapApplications(o.Applications),
Doors: mapDoors(o.Doors),
Keys: mapKeys(o.Keys),
}
}
func mapApplications(o []*storytelling.Application) []*proto.Application {
res := make([]*proto.Application, 0, len(o))
for _, item := range o {
res = append(res, mapApplication(item))
}
return res
}
func mapDoors(o []*storytelling.Door) []*proto.Door {
res := make([]*proto.Door, 0, len(o))
for _, item := range o {
res = append(res, mapDoor(item))
}
return res
}
func mapKeys(o []*storytelling.Key) []*proto.Key {
res := make([]*proto.Key, 0, len(o))
for _, item := range o {
res = append(res, mapKey(item))
}
return res
}
func mapApplication(o *storytelling.Application) *proto.Application {
return &proto.Application{
Name: o.Name,
Image: o.Image,
}
}
func mapDoor(o *storytelling.Door) *proto.Door {
return &proto.Door{
Code: o.Code,
Name: o.Name,
Keys: mapKeys(o.Keys),
}
}
func mapKey(o *storytelling.Key) *proto.Key {
return &proto.Key{
Name: o.Name,
}
}
func convertPlace(o *proto.Place) *storytelling.Place {
return &storytelling.Place{
Code: o.Code,
Name: formatter_utils.FormatString(o.Name),
Text: formatter_utils.FormatText(o.Text),
Image: o.Image,
Hidden: o.Hidden,
Applications: convertApplications(o.Applications),
Doors: convertDoors(o.Doors),
Keys: convertKeys(o.Keys),
}
}
func convertApplications(o []*proto.Application) []*storytelling.Application {
res := make([]*storytelling.Application, 0, len(o))
for _, item := range o {
res = append(res, convertApplication(item))
}
return res
}
func convertDoors(o []*proto.Door) []*storytelling.Door {
res := make([]*storytelling.Door, 0, len(o))
for _, item := range o {
res = append(res, convertDoor(item))
}
return res
}
func convertKeys(o []*proto.Key) []*storytelling.Key {
res := make([]*storytelling.Key, 0, len(o))
for _, item := range o {
res = append(res, convertKey(item))
}
return res
}
func convertApplication(o *proto.Application) *storytelling.Application {
return &storytelling.Application{
Name: formatter_utils.FormatString(o.Name),
Image: o.Image,
}
}
func convertDoor(o *proto.Door) *storytelling.Door {
return &storytelling.Door{
Code: o.Code,
Name: formatter_utils.FormatString(o.Name),
Keys: convertKeys(o.Keys),
}
}
func convertKey(o *proto.Key) *storytelling.Key {
return &storytelling.Key{
Name: formatter_utils.FormatString(o.Name),
}
}