Skip to content

Commit

Permalink
feat(server): implement server to global player (#16)
Browse files Browse the repository at this point in the history
* refactor of gobal player types

* implement initial server
  • Loading branch information
jj-style authored Mar 28, 2024
1 parent 096a9c0 commit 469a7aa
Show file tree
Hide file tree
Showing 33 changed files with 1,603 additions and 546 deletions.
9 changes: 9 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
.gitignore
Dockerfile
*.yaml
*.yml
*.xml
*.md
justfile
LICENSE
bin/
33 changes: 33 additions & 0 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,36 @@ jobs:
uses: softprops/action-gh-release@v2
with:
body_path: ${{ github.workspace }}-CHANGELOG.txt

docker:
name: Publish docker image
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/gobal-player-server

- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: cmd/gobal-player-server
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
6 changes: 6 additions & 0 deletions .mockery.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,9 @@ packages:
Client:
HttpClient:
Cache:
github.com/jj-style/gobal-player/cmd/gobal-player-server/internal/biz/globalplayer:
interfaces:
UseCase:
github.com/jj-style/gobal-player/pkg/globalplayer:
interfaces:
GlobalPlayer:
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,10 @@ gobal-player-tui
### Developing

Please install [pre-commit](https://pre-commit.com/#install), and [just](https://github.com/casey/just?tab=readme-ov-file#installation) and run `just hooks` to initialize your git pre-commit hooks.

## gobal-player-server
RESTful server with friendly APIs to global player, and more features coming soon!

### Docker

Run with docker: `docker run --rm -it -p 8080:8080 ghcr.io/jj-style/gobal-player-server:v0.1.8`
17 changes: 17 additions & 0 deletions cmd/gobal-player-server/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
FROM golang:1.22-bookworm as builder

WORKDIR /build

COPY go.mod go.sum ./

RUN go mod download -x

COPY . .

RUN CGO_ENABLED=0 go build ./cmd/gobal-player-server

FROM gcr.io/distroless/static

COPY --from=builder /build/gobal-player-server .

ENTRYPOINT [ "./gobal-player-server" ]
8 changes: 8 additions & 0 deletions cmd/gobal-player-server/internal/biz/biz.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package biz

import (
"github.com/google/wire"
"github.com/jj-style/gobal-player/cmd/gobal-player-server/internal/biz/globalplayer"
)

var ProviderSet = wire.NewSet(globalplayer.NewUseCase)

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

36 changes: 36 additions & 0 deletions cmd/gobal-player-server/internal/biz/globalplayer/usecase.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package globalplayer

import (
"context"

"github.com/jj-style/gobal-player/pkg/globalplayer"
"github.com/jj-style/gobal-player/pkg/globalplayer/models"
)

type UseCase interface {
GetStations(context.Context) ([]*models.Station, error)
GetShows(context.Context, string) ([]*models.Show, error)
GetEpisodes(context.Context, string, string) ([]*models.Episode, error)
}

type useCase struct {
gp globalplayer.GlobalPlayer
}

func (u *useCase) GetStations(ctx context.Context) ([]*models.Station, error) {
return u.gp.GetStations()
}

func (u *useCase) GetShows(ctx context.Context, stationSlug string) ([]*models.Show, error) {
return u.gp.GetShows(stationSlug)
}

func (u *useCase) GetEpisodes(ctx context.Context, stationSlug, showId string) ([]*models.Episode, error) {
return u.gp.GetEpisodes(stationSlug, showId)
}

func NewUseCase(gp globalplayer.GlobalPlayer) UseCase {
return &useCase{
gp: gp,
}
}
Loading

0 comments on commit 469a7aa

Please sign in to comment.