refactored code, removed *_helper.go files and placed them in *.resolvers.go files for uniformity
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 3m23s
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 3m23s
This commit is contained in:
40
backend/graph/gitea.resolvers.go
Normal file
40
backend/graph/gitea.resolvers.go
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
package graph
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"adam-french.co.uk/backend/graph/model"
|
||||||
|
"adam-french.co.uk/backend/services"
|
||||||
|
)
|
||||||
|
|
||||||
|
func mapGiteaFeed(feed *services.GiteaFeedResponse) *model.GiteaFeedItem {
|
||||||
|
return &model.GiteaFeedItem{
|
||||||
|
AvatarURL: feed.ActUser.AvatarURL,
|
||||||
|
RepoURL: feed.Repo.HTMLURL,
|
||||||
|
RepoName: feed.Repo.FullName,
|
||||||
|
OpType: feed.OpType,
|
||||||
|
CommitMessage: services.ParseCommitMessage(feed.Content),
|
||||||
|
CreatedAt: feed.Created,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GiteaFeed is the resolver for the giteaFeed field.
|
||||||
|
func (r *queryResolver) GiteaFeed(ctx context.Context) (*model.GiteaFeedItem, error) {
|
||||||
|
if r.Store.GiteaFeedFresh() {
|
||||||
|
return mapGiteaFeed(r.Store.GiteaFeed), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
feed, err := services.FetchLatestFeed(r.Store.GiteaHost, r.Store.GiteaPort)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if feed == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
r.Store.GiteaFeed = feed
|
||||||
|
r.Store.GiteaFeedFetchedAt = time.Now()
|
||||||
|
|
||||||
|
return mapGiteaFeed(feed), nil
|
||||||
|
}
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
package graph
|
|
||||||
|
|
||||||
import (
|
|
||||||
"adam-french.co.uk/backend/graph/model"
|
|
||||||
"adam-french.co.uk/backend/services"
|
|
||||||
)
|
|
||||||
|
|
||||||
func mapGiteaFeed(feed *services.GiteaFeedResponse) *model.GiteaFeedItem {
|
|
||||||
return &model.GiteaFeedItem{
|
|
||||||
AvatarURL: feed.ActUser.AvatarURL,
|
|
||||||
RepoURL: feed.Repo.HTMLURL,
|
|
||||||
RepoName: feed.Repo.FullName,
|
|
||||||
OpType: feed.OpType,
|
|
||||||
CommitMessage: services.ParseCommitMessage(feed.Content),
|
|
||||||
CreatedAt: feed.Created,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -9,12 +9,9 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
|
||||||
|
|
||||||
"adam-french.co.uk/backend/graph/model"
|
"adam-french.co.uk/backend/graph/model"
|
||||||
"adam-french.co.uk/backend/models"
|
"adam-french.co.uk/backend/models"
|
||||||
"adam-french.co.uk/backend/services"
|
|
||||||
spotify "github.com/zmb3/spotify/v2"
|
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -550,105 +547,6 @@ func (r *queryResolver) Messages(ctx context.Context) ([]*models.Message, error)
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SpotifyListening is the resolver for the spotifyListening field.
|
|
||||||
func (r *queryResolver) SpotifyListening(ctx context.Context) (*model.SpotifyPlaying, error) {
|
|
||||||
if r.Store.SpotifyClient == nil {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
playing, err := r.Store.SpotifyClient.PlayerCurrentlyPlaying(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
result := &model.SpotifyPlaying{Playing: playing.Playing}
|
|
||||||
if playing.Item != nil {
|
|
||||||
result.Track = mapSpotifyTrack(playing.Item)
|
|
||||||
}
|
|
||||||
|
|
||||||
return result, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SpotifyRecent is the resolver for the spotifyRecent field.
|
|
||||||
func (r *queryResolver) SpotifyRecent(ctx context.Context) ([]*model.SpotifyRecentItem, error) {
|
|
||||||
if r.Store.SpotifyClient == nil {
|
|
||||||
return []*model.SpotifyRecentItem{}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.Store.RecentSongsFresh() {
|
|
||||||
return mapRecentItems(*r.Store.RecentSongs), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
opts := spotify.RecentlyPlayedOptions{Limit: 3}
|
|
||||||
played, err := r.Store.SpotifyClient.PlayerRecentlyPlayedOpt(ctx, &opts)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
r.Store.RecentSongs = &played
|
|
||||||
r.Store.RecentSongsFetchedAt = time.Now()
|
|
||||||
|
|
||||||
return mapRecentItems(played), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GiteaFeed is the resolver for the giteaFeed field.
|
|
||||||
func (r *queryResolver) GiteaFeed(ctx context.Context) (*model.GiteaFeedItem, error) {
|
|
||||||
if r.Store.GiteaFeedFresh() {
|
|
||||||
return mapGiteaFeed(r.Store.GiteaFeed), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
feed, err := services.FetchLatestFeed(r.Store.GiteaHost, r.Store.GiteaPort)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if feed == nil {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
r.Store.GiteaFeed = feed
|
|
||||||
r.Store.GiteaFeedFetchedAt = time.Now()
|
|
||||||
|
|
||||||
return mapGiteaFeed(feed), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SteamStatus is the resolver for the steamStatus field.
|
|
||||||
func (r *queryResolver) SteamStatus(ctx context.Context) (*model.SteamStatus, error) {
|
|
||||||
if r.Store.SteamAPIKey == "" {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.Store.SteamFresh() {
|
|
||||||
return &model.SteamStatus{
|
|
||||||
Online: r.Store.SteamOnline,
|
|
||||||
RecentGames: mapSteamGames(r.Store.SteamRecentGames),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
games, err := services.FetchRecentlyPlayedGames(r.Store.SteamAPIKey, r.Store.SteamID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
summary, err := services.FetchPlayerSummary(r.Store.SteamAPIKey, r.Store.SteamID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
online := false
|
|
||||||
if summary != nil {
|
|
||||||
online = summary.PersonaState > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
r.Store.SteamRecentGames = games
|
|
||||||
r.Store.SteamOnline = online
|
|
||||||
r.Store.SteamFetchedAt = time.Now()
|
|
||||||
|
|
||||||
return &model.SteamStatus{
|
|
||||||
Online: online,
|
|
||||||
RecentGames: mapSteamGames(games),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Me is the resolver for the me field.
|
// Me is the resolver for the me field.
|
||||||
func (r *queryResolver) Me(ctx context.Context) (*models.User, error) {
|
func (r *queryResolver) Me(ctx context.Context) (*models.User, error) {
|
||||||
userID, ok := UserIDFromCtx(ctx)
|
userID, ok := UserIDFromCtx(ctx)
|
||||||
@@ -720,5 +618,7 @@ func (r *Resolver) Mutation() MutationResolver { return &mutationResolver{r} }
|
|||||||
// Query returns QueryResolver implementation.
|
// Query returns QueryResolver implementation.
|
||||||
func (r *Resolver) Query() QueryResolver { return &queryResolver{r} }
|
func (r *Resolver) Query() QueryResolver { return &queryResolver{r} }
|
||||||
|
|
||||||
type mutationResolver struct{ *Resolver }
|
type (
|
||||||
type queryResolver struct{ *Resolver }
|
mutationResolver struct{ *Resolver }
|
||||||
|
queryResolver struct{ *Resolver }
|
||||||
|
)
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
package graph
|
package graph
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
"adam-french.co.uk/backend/graph/model"
|
"adam-french.co.uk/backend/graph/model"
|
||||||
"github.com/zmb3/spotify/v2"
|
"github.com/zmb3/spotify/v2"
|
||||||
)
|
)
|
||||||
@@ -49,3 +52,44 @@ func mapRecentItems(items []spotify.RecentlyPlayedItem) []*model.SpotifyRecentIt
|
|||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SpotifyListening is the resolver for the spotifyListening field.
|
||||||
|
func (r *queryResolver) SpotifyListening(ctx context.Context) (*model.SpotifyPlaying, error) {
|
||||||
|
if r.Store.SpotifyClient == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
playing, err := r.Store.SpotifyClient.PlayerCurrentlyPlaying(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
result := &model.SpotifyPlaying{Playing: playing.Playing}
|
||||||
|
if playing.Item != nil {
|
||||||
|
result.Track = mapSpotifyTrack(playing.Item)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SpotifyRecent is the resolver for the spotifyRecent field.
|
||||||
|
func (r *queryResolver) SpotifyRecent(ctx context.Context) ([]*model.SpotifyRecentItem, error) {
|
||||||
|
if r.Store.SpotifyClient == nil {
|
||||||
|
return []*model.SpotifyRecentItem{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.Store.RecentSongsFresh() {
|
||||||
|
return mapRecentItems(*r.Store.RecentSongs), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
opts := spotify.RecentlyPlayedOptions{Limit: 3}
|
||||||
|
played, err := r.Store.SpotifyClient.PlayerRecentlyPlayedOpt(ctx, &opts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
r.Store.RecentSongs = &played
|
||||||
|
r.Store.RecentSongsFetchedAt = time.Now()
|
||||||
|
|
||||||
|
return mapRecentItems(played), nil
|
||||||
|
}
|
||||||
62
backend/graph/steam.resolvers.go
Normal file
62
backend/graph/steam.resolvers.go
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
package graph
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"adam-french.co.uk/backend/graph/model"
|
||||||
|
"adam-french.co.uk/backend/services"
|
||||||
|
)
|
||||||
|
|
||||||
|
func mapSteamGames(games []services.SteamRecentGame) []*model.SteamGame {
|
||||||
|
result := make([]*model.SteamGame, len(games))
|
||||||
|
for i, g := range games {
|
||||||
|
result[i] = &model.SteamGame{
|
||||||
|
AppID: g.AppID,
|
||||||
|
Name: g.Name,
|
||||||
|
Playtime2Weeks: g.Playtime2Weeks,
|
||||||
|
PlaytimeForever: g.PlaytimeForever,
|
||||||
|
HeaderImageURL: fmt.Sprintf("https://cdn.akamai.steamstatic.com/steam/apps/%d/header.jpg", g.AppID),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// SteamStatus is the resolver for the steamStatus field.
|
||||||
|
func (r *queryResolver) SteamStatus(ctx context.Context) (*model.SteamStatus, error) {
|
||||||
|
if r.Store.SteamAPIKey == "" {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.Store.SteamFresh() {
|
||||||
|
return &model.SteamStatus{
|
||||||
|
Online: r.Store.SteamOnline,
|
||||||
|
RecentGames: mapSteamGames(r.Store.SteamRecentGames),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
games, err := services.FetchRecentlyPlayedGames(r.Store.SteamAPIKey, r.Store.SteamID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
summary, err := services.FetchPlayerSummary(r.Store.SteamAPIKey, r.Store.SteamID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
online := false
|
||||||
|
if summary != nil {
|
||||||
|
online = summary.PersonaState > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
r.Store.SteamRecentGames = games
|
||||||
|
r.Store.SteamOnline = online
|
||||||
|
r.Store.SteamFetchedAt = time.Now()
|
||||||
|
|
||||||
|
return &model.SteamStatus{
|
||||||
|
Online: online,
|
||||||
|
RecentGames: mapSteamGames(games),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
package graph
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"adam-french.co.uk/backend/graph/model"
|
|
||||||
"adam-french.co.uk/backend/services"
|
|
||||||
)
|
|
||||||
|
|
||||||
func mapSteamGames(games []services.SteamRecentGame) []*model.SteamGame {
|
|
||||||
result := make([]*model.SteamGame, len(games))
|
|
||||||
for i, g := range games {
|
|
||||||
result[i] = &model.SteamGame{
|
|
||||||
AppID: g.AppID,
|
|
||||||
Name: g.Name,
|
|
||||||
Playtime2Weeks: g.Playtime2Weeks,
|
|
||||||
PlaytimeForever: g.PlaytimeForever,
|
|
||||||
HeaderImageURL: fmt.Sprintf("https://cdn.akamai.steamstatic.com/steam/apps/%d/header.jpg", g.AppID),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user