feat: complete MVP setup with CI/CD, Makefile, docker, and backlog docs

This commit is contained in:
2026-08-24 21:43:21 -07:00
parent 7a51931386
commit 4197d86626
20 changed files with 590 additions and 24 deletions
+6 -6
View File
@@ -11,13 +11,13 @@ import (
"strings"
"time"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/auth"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/crawler"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/db"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/models"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/opml"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/parser"
"github.com/go-chi/chi/v5"
"github.com/haopengzhan/rsspipe/internal/auth"
"github.com/haopengzhan/rsspipe/internal/crawler"
"github.com/haopengzhan/rsspipe/internal/db"
"github.com/haopengzhan/rsspipe/internal/models"
"github.com/haopengzhan/rsspipe/internal/opml"
"github.com/haopengzhan/rsspipe/internal/parser"
)
type Handler struct {
+1 -1
View File
@@ -6,10 +6,10 @@ import (
"path/filepath"
"strings"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/auth"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
"github.com/go-chi/cors"
"github.com/haopengzhan/rsspipe/internal/auth"
)
func NewRouter(h *Handler, authService *auth.AuthService, staticDir string) http.Handler {
+2 -2
View File
@@ -8,9 +8,9 @@ import (
"strings"
"time"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/config"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/db"
"github.com/golang-jwt/jwt/v5"
"github.com/haopengzhan/rsspipe/internal/config"
"github.com/haopengzhan/rsspipe/internal/db"
"golang.org/x/crypto/bcrypt"
)
+3 -3
View File
@@ -7,9 +7,9 @@ import (
"sync"
"time"
"github.com/haopengzhan/rsspipe/internal/db"
"github.com/haopengzhan/rsspipe/internal/models"
"github.com/haopengzhan/rsspipe/internal/parser"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/db"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/models"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/parser"
)
type Crawler struct {
+1 -1
View File
@@ -9,8 +9,8 @@ import (
"strings"
"time"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/models"
"github.com/google/uuid"
"github.com/haopengzhan/rsspipe/internal/models"
_ "modernc.org/sqlite"
)
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"testing"
"time"
"github.com/haopengzhan/rsspipe/internal/models"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/models"
)
func TestDatabaseOperations(t *testing.T) {
+1 -1
View File
@@ -6,7 +6,7 @@ import (
"strings"
"time"
"github.com/haopengzhan/rsspipe/internal/models"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/models"
)
type OPML struct {
+1 -1
View File
@@ -3,7 +3,7 @@ package opml
import (
"testing"
"github.com/haopengzhan/rsspipe/internal/models"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/models"
)
func TestParseAndGenerateOPML(t *testing.T) {
+2 -2
View File
@@ -8,8 +8,8 @@ import (
"strings"
"time"
"git.pengzhan.dev/haopengzhan/rsspipe/internal/models"
"github.com/mmcdole/gofeed"
"github.com/haopengzhan/rsspipe/internal/models"
)
type FetchResult struct {
@@ -39,7 +39,7 @@ func (p *Parser) FetchFeed(ctx context.Context, feedURL, etag, lastModified stri
return nil, fmt.Errorf("failed to create request: %w", err)
}
req.Header.Set("User-Agent", "RSSPipe/1.0 (+https://github.com/haopengzhan/rsspipe)")
req.Header.Set("User-Agent", "RSSPipe/1.0 (+https://git.pengzhan.dev/haopengzhan/rsspipe)")
req.Header.Set("Accept", "application/rss+xml, application/atom+xml, application/xml, text/xml, application/json;q=0.9, */*;q=0.8")
if etag != "" {