add route

This commit is contained in:
2026-03-26 02:23:36 +07:00
parent 9f9ffaa55f
commit 0a6294a62f
12 changed files with 864 additions and 22 deletions
+2 -2
View File
@@ -25,13 +25,13 @@ type performance struct {
type ScheduleParser struct {
dataParser data_parser.IDataParser
dateParser date_parser.IDateParser
scheduleStorage schedule_storage.ScheduleStorage
scheduleStorage *schedule_storage.ScheduleStorage
}
func NewScheduleParser(
dataParser data_parser.IDataParser,
dateParser date_parser.IDateParser,
scheduleStorage schedule_storage.ScheduleStorage,
scheduleStorage *schedule_storage.ScheduleStorage,
) *ScheduleParser {
return &ScheduleParser{
dataParser: dataParser,
@@ -2,6 +2,7 @@ package schedule_storage
import (
"encoding/json"
"fmt"
"log"
"os"
"pinned_message/internal/models"
@@ -30,3 +31,16 @@ func (s *ScheduleStorage) SaveSchedule(days []*models.Day) error {
log.Printf("save story to: %s", s.filepath)
return nil
}
func (s *ScheduleStorage) GetSchedule() ([]*models.Day, error) {
data, err := os.ReadFile(s.filepath)
if err != nil {
return nil, fmt.Errorf("story file %s not found", s.filepath)
}
log.Printf("load story from: %s", s.filepath)
days := []*models.Day{}
if err := json.Unmarshal(data, &days); err != nil {
return nil, err
}
return days, nil
}
+66
View File
@@ -0,0 +1,66 @@
package services
import (
"context"
"pinned_message/internal/services/schedule_storage"
"pinned_message/proto"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
type Services struct {
scheduleStorage *schedule_storage.ScheduleStorage
}
func NewServices(
scheduleStorage *schedule_storage.ScheduleStorage,
) *Services {
return &Services{
scheduleStorage: scheduleStorage,
}
}
func (s *Services) GetDays(context.Context, *proto.GetDaysReq) (*proto.GetDaysRsp, error) {
days, err := s.scheduleStorage.GetSchedule()
if err != nil {
return nil, status.Errorf(codes.Internal, err.Error())
}
res := &proto.GetDaysRsp{}
for _, day := range days {
resPerformances := make([]*proto.Performance, 0, len(day.Performances))
for _, performance := range day.Performances {
resNumbers := make([]*proto.Number, 0, len(performance.Numbers))
for _, number := range performance.Numbers {
resNumbers = append(
resNumbers,
&proto.Number{
Name: number.Name,
},
)
}
resPerformances = append(
resPerformances,
&proto.Performance{
TimeCollection: performance.TimeCollection,
TimeStart: performance.TimeStart,
Place: performance.Place,
Name: performance.Name,
Numbers: resNumbers,
Costumes: performance.Costumes,
},
)
}
res.Days = append(
res.Days,
&proto.Day{
Date: day.Date.String(),
Performances: resPerformances,
},
)
}
return res, nil
}