Files
softplayer-backend/internal/api/v1/projects.go
Nikolai Rodionov 3ea6765486
All checks were successful
ci/woodpecker/push/build Pipeline was successful
Implement a couple of rpcs
Signed-off-by: Nikolai Rodionov <iam@allanger.xyz>
2026-06-09 14:52:06 +02:00

79 lines
2.4 KiB
Go

package v1
import (
"context"
"gitea.badhouseplants.net/softplayer/softplayer-backend/internal/services"
projects "gitea.badhouseplants.net/softplayer/softplayer-go-proto/pkg/projects/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
func NewProjectsServer(projectCtrl *services.ProjectsController) *ProjectsServer {
return &ProjectsServer{
projectCtrl: projectCtrl,
}
}
// var _ projects.ProjectsServiceServer = (*ProjectsServer)(nil)
type ProjectsServer struct {
projects.UnimplementedProjectsServiceServer
projectCtrl *services.ProjectsController
}
// CreateProject implements [v1.ProjectsServiceServer].
func (p *ProjectsServer) CreateProject(ctx context.Context, in *projects.CreateProjectRequest) (*projects.CreateProjectResponse, error) {
claims, err := services.ClaimsFromContext(ctx)
if err != nil {
return nil, status.Error(codes.Aborted, "Context is invalid")
}
projectData := &services.ProjectData{
Name: in.Name,
Slug: in.Slug,
Description: in.Description,
}
id, err := p.projectCtrl.Create(ctx, projectData, claims.UserID)
if err != nil {
return nil, status.Error(codes.Aborted, "Couldn't create a project")
}
return &projects.CreateProjectResponse{Id: id}, nil
}
// GetProject implements [v1.ProjectsServiceServer].
func (p *ProjectsServer) GetProject(context.Context, *projects.GetProjectRequest) (*projects.GetProjectResponse, error) {
panic("unimplemented")
}
// ListProjects implements [v1.ProjectsServiceServer].
func (p *ProjectsServer) ListProjects(_in *projects.ListProjectsRequest, stream grpc.ServerStreamingServer[projects.ListProjectsResponse]) error {
claims, err := services.ClaimsFromContext(stream.Context())
if err != nil {
return status.Error(codes.Aborted, "Context is invalid")
}
res, err := p.projectCtrl.List(stream.Context(), claims.UserID)
if err != nil {
return status.Error(codes.Aborted, "Couldn't list projects")
}
for _, project := range res {
payload := &projects.ListProjectsResponse{
Id: project.UUID,
Slug: "dummy",
Name: project.Name,
}
if err := stream.Send(payload); err != nil {
return status.Error(codes.Aborted, "Couldn't send data")
}
}
return nil
}
// UpdateProject implements [v1.ProjectsServiceServer].
func (p *ProjectsServer) UpdateProject(context.Context, *projects.UpdateProjectRequest) (*projects.UpdateProjectResponse, error) {
panic("unimplemented")
}