86 lines
2.0 KiB
Go
86 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"net/http"
|
|
|
|
"git.itzana.me/strafesnet/maps-service/api"
|
|
"git.itzana.me/strafesnet/maps-service/internal/controller/submissions"
|
|
"git.itzana.me/strafesnet/maps-service/internal/controller/users"
|
|
"git.itzana.me/strafesnet/maps-service/internal/datastore/gormstore"
|
|
)
|
|
|
|
type apiServer struct {
|
|
submissions *submissions.Submissions
|
|
users *users.Users
|
|
}
|
|
|
|
// GetUserRank implements api.Handler.
|
|
func (m *apiServer) GetSubmission(ctx context.Context, params api.GetSubmissionParams) (*api.Submission, error) {
|
|
return m.submissions.Get(ctx,params)
|
|
}
|
|
|
|
// NewError implements api.Handler.
|
|
func (m *apiServer) NewError(ctx context.Context, err error) *api.ErrorStatusCode {
|
|
return &api.ErrorStatusCode{
|
|
StatusCode: 500,
|
|
Response: api.Error{Message: err.Error()},
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
db, err := gormstore.New(true)
|
|
if err != nil {
|
|
log.WithField("error", err).Fatalln("database startup failed")
|
|
return
|
|
}
|
|
|
|
svc := &apiServer{
|
|
submissions: db.Submissions(),
|
|
users: db.Users(),
|
|
}
|
|
|
|
srv, err := api.NewServer(
|
|
svc,
|
|
api.WithPathPrefix("/v2"),
|
|
)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
if err := http.ListenAndServe(":8080", srv); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func convertTime(t *times.TimeResponse) api.Time {
|
|
return api.Time{
|
|
ID: api.NewOptInt64(t.ID),
|
|
Time: api.NewOptInt64(t.Time),
|
|
User: api.NewOptUser(api.User{
|
|
ID: api.NewOptInt64(t.User.ID),
|
|
Username: api.NewOptString(t.User.Username),
|
|
StateID: api.NewOptInt32(t.User.StateID),
|
|
}),
|
|
Map: api.NewOptMap(api.Map{
|
|
ID: api.NewOptInt64(t.Map.ID),
|
|
DisplayName: api.NewOptString(t.Map.DisplayName),
|
|
Creator: api.NewOptString(t.Map.Creator),
|
|
Date: api.NewOptInt64(t.Map.Date),
|
|
}),
|
|
Date: api.NewOptInt64(t.Date),
|
|
StyleID: api.NewOptInt32(t.StyleID),
|
|
ModeID: api.NewOptInt32(t.ModeID),
|
|
GameID: api.NewOptInt32(t.GameID),
|
|
}
|
|
}
|
|
|
|
func convertTimes(timeList []*times.TimeResponse) []api.Time {
|
|
times := make([]api.Time, len(timeList))
|
|
for i, t := range timeList {
|
|
times[i] = convertTime(t)
|
|
}
|
|
return times
|
|
}
|