add catalog

This commit is contained in:
2026-07-26 02:13:24 +07:00
parent d5a99508d3
commit fc9753e069
10 changed files with 498 additions and 163 deletions
+13
View File
@@ -242,6 +242,19 @@ func (s *server) GetMyScenarios(ctx context.Context, req *proto.GetMyScenariosRe
}, nil
}
func (s *server) GetScenariosCatalog(ctx context.Context, req *proto.GetScenariosCatalogReq) (*proto.GetScenariosCatalogRsp, error) {
scenarios, err := s.scenarioService.GetScenariosCatalog(ctx)
if err != nil {
return &proto.GetScenariosCatalogRsp{
Error: err.Error(),
}, nil
}
return &proto.GetScenariosCatalogRsp{
Scenarios: mapScenarios(scenarios),
}, nil
}
func (s *server) GetScenario(ctx context.Context, req *proto.GetScenarioReq) (*proto.GetScenarioRsp, error) {
claims := ctx.Value("claims").(*processor_jwt.JWTClaims)
if !roles.HasRole(claims, roles.Author) {
+59
View File
@@ -103,6 +103,65 @@ func (s *ScenariosRepo) GetScenariosByAuthorID(
return scenarios, nil
}
func (s *ScenariosRepo) GetScenariosByStatus(
ctx context.Context,
status string,
) ([]*repos.Scenario, error) {
rows, err := s.pool.Query(
ctx,
`SELECT
scenarios.id,
scenarios.name,
scenarios.description,
scenarios.image,
scenarios.scenario,
users.id,
users.username,
scenarios.status,
scenarios.updated_at,
scenarios.created_at,
scenarios.published_at
FROM scenarios
LEFT JOIN users on scenarios.author_id = users.id
WHERE scenarios.status = $1 and is_deleted = FALSE
ORDER BY created_at DESC`,
status,
)
if err != nil {
return nil, err
}
defer rows.Close()
var scenarios []*repos.Scenario
for rows.Next() {
scenario := &repos.Scenario{
Author: &repos.User{},
}
err := rows.Scan(
&scenario.ID,
&scenario.Name,
&scenario.Description,
&scenario.Image,
&scenario.Scenario,
&scenario.Author.ID,
&scenario.Author.Username,
&scenario.Status,
&scenario.UpdatedAt,
&scenario.CreatedAt,
&scenario.PublishedAt,
)
if err != nil {
return nil, err
}
scenarios = append(scenarios, scenario)
}
if err := rows.Err(); err != nil {
return nil, err
}
return scenarios, nil
}
func (s *ScenariosRepo) GetScenarioByID(
ctx context.Context,
id int,
@@ -46,6 +46,16 @@ func (s *ScenarioService) GetScenariosByAuthorID(
return mapScenariosLight(scenarios, s.domain), nil
}
func (s *ScenarioService) GetScenariosCatalog(
ctx context.Context,
) ([]*Scenario, error) {
scenarios, err := s.scenariosRepo.GetScenariosByStatus(ctx, "public")
if err != nil {
return nil, err
}
return mapScenariosLight(scenarios, s.domain), nil
}
func (s *ScenarioService) GetScenarioByID(
ctx context.Context,
id int,
+1
View File
@@ -21,6 +21,7 @@ var (
},
rolesModule.User: {
"games_page",
"catalog_page",
},
}
)