A website inspired by Last.fm that will keep track of your listening statistics
lastfm music statistics
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Make beginning to user service and to recording repos. Update task file to build app.

oscar345 cf67635e 809b1f4c

+95 -2
+24
internal/image/release.go
··· 1 + package image 2 + 3 + import "context" 4 + 5 + type ReleaseImageFetcher interface { 6 + ListImages(ctx context.Context, mbid string) ([]Image, error) 7 + FetchImage(ctx context.Context, image Image) ([]byte, error) 8 + } 9 + 10 + type ReleaseImageFetcherCoverArtArchive struct{} 11 + 12 + var _ ReleaseImageFetcher = (*ReleaseImageFetcherCoverArtArchive)(nil) 13 + 14 + func NewReleaseImageFetcherCoverArtArchive() *ReleaseImageFetcherCoverArtArchive { 15 + return &ReleaseImageFetcherCoverArtArchive{} 16 + } 17 + 18 + func (f *ReleaseImageFetcherCoverArtArchive) ListImages(ctx context.Context, mbid string) ([]Image, error) { 19 + return nil, nil 20 + } 21 + 22 + func (f *ReleaseImageFetcherCoverArtArchive) FetchImage(ctx context.Context, image Image) ([]byte, error) { 23 + return nil, nil 24 + }
+32
internal/repo/db/recording_like.go
··· 1 + package db 2 + 3 + import ( 4 + "context" 5 + "database/sql" 6 + 7 + "github.com/oscar345/keeptrack/internal/models" 8 + "github.com/oscar345/keeptrack/pkg/pagination" 9 + ) 10 + 11 + type RecordingLikeRepo struct { 12 + db *sql.DB 13 + } 14 + 15 + func NewRecordingLikeRepo(db *sql.DB) *RecordingLikeRepo { 16 + return &RecordingLikeRepo{ 17 + db: db, 18 + } 19 + } 20 + 21 + func (repo *RecordingLikeRepo) Like(ctx context.Context, userID string, mbid string) error { 22 + 23 + return nil 24 + } 25 + 26 + func (repo *RecordingLikeRepo) Unlike(ctx context.Context, userID string, mbid string) error { 27 + return nil 28 + } 29 + 30 + func (repo *RecordingLikeRepo) List(ctx context.Context, userID string, filter pagination.Filter) ([]models.Recording, pagination.Page, error) { 31 + return nil, pagination.Page{}, nil 32 + }
internal/services/catalog.go internal/services/artist.go
+15
internal/services/user.go
··· 1 + package services 2 + 3 + import "github.com/oscar345/keeptrack/internal/repo" 4 + 5 + type UserService struct { 6 + userRepo repo.UserRepo 7 + userFollowRepo repo.UserFollowRepo 8 + } 9 + 10 + func NewUserService(userRepo repo.UserRepo, userFollowRepo repo.UserFollowRepo) *UserService { 11 + return &UserService{ 12 + userRepo: userRepo, 13 + userFollowRepo: userFollowRepo, 14 + } 15 + }
+10 -2
private/migrations/app/20260113080142_create_recording_likes.sql
··· 1 1 -- +goose Up 2 2 -- +goose StatementBegin 3 - SELECT 'up SQL query'; 3 + CREATE TABLE recording_likes ( 4 + recording_mbid TEXT NOT NULL, 5 + user_id TEXT NOT NULL, 6 + created TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), 7 + PRIMARY KEY (recording_mbid, user_id) 8 + ); 9 + 10 + CREATE INDEX idx__recording_likes__user_id ON recording_likes (user_id); 11 + CREATE INDEX idx__recording_likes__recording_mbid ON recording_likes (recording_mbid); 4 12 -- +goose StatementEnd 5 13 6 14 -- +goose Down 7 15 -- +goose StatementBegin 8 - SELECT 'down SQL query'; 16 + DROP TABLE recording_likes; 9 17 -- +goose StatementEnd
+14
taskfile.yml
··· 84 84 dir: resources 85 85 cmd: npx postcss css/main.css --config css --output ../private/assets/app.css --watch 86 86 87 + build:css: 88 + dir: resources 89 + cmd: npx postcss css/main.css --config css --output ../private/assets/app.css 90 + 87 91 watch:js: 88 92 dir: resources 89 93 cmd: npx esbuild js/main.js --bundle --outfile=../private/assets/app.js --watch 94 + 95 + build:js: 96 + dir: resources 97 + cmd: npx esbuild js/main.js --bundle --outfile=../private/assets/app.js --deploy 90 98 91 99 build:*: 92 100 cmd: go build -o bin/{{ index .MATCH 0 }} cmd/{{ index .MATCH 0 }}/main.go ··· 119 127 - task: watch:js 120 128 - task: run:server 121 129 cmd: echo "serving" 130 + 131 + build: 132 + cmds: 133 + - task: build:css 134 + - task: build:js 135 + - task: build:server