From 76cfef10f2cce4f23b9029cbe90b112f30ac5ca9 Mon Sep 17 00:00:00 2001 From: overflowerror Date: Sat, 21 Aug 2021 15:47:30 +0200 Subject: [PATCH] feat: added getThreads api endpoint --- backend/internal/app/data.go | 1 + backend/internal/app/logic.go | 1 + backend/internal/data/thread.go | 12 ++++++++++++ backend/internal/logic/thread.go | 4 ++++ backend/internal/presentation/thread.go | 15 +++++++++++++++ backend/internal/router/routes.go | 1 + 6 files changed, 34 insertions(+) diff --git a/backend/internal/app/data.go b/backend/internal/app/data.go index c2a72b1..6e1074d 100644 --- a/backend/internal/app/data.go +++ b/backend/internal/app/data.go @@ -27,6 +27,7 @@ type Data interface { AddThread(thread *models.Thread) error UpdateThread(thread *models.Thread) error GetThread(id uuid.UUID, user *models.User) (*models.Thread, error) + GetThreads(user *models.User) ([]models.Thread, error) GetScheduledThreads() ([]models.Thread, error) GetTweetsForThread(thread *models.Thread) ([]models.Tweet, error) UpdateThreadWithoutTweets(thread *models.Thread) error diff --git a/backend/internal/app/logic.go b/backend/internal/app/logic.go index 83a9b66..7f1995f 100644 --- a/backend/internal/app/logic.go +++ b/backend/internal/app/logic.go @@ -15,4 +15,5 @@ type Logic interface { AddThread(thread *models.Thread, user *models.User) error UpdateThread(thread *models.Thread, user *models.User) error + GetThreads(user *models.User) ([]models.Thread, error) } diff --git a/backend/internal/data/thread.go b/backend/internal/data/thread.go index 0cf11fb..a5dcc0f 100644 --- a/backend/internal/data/thread.go +++ b/backend/internal/data/thread.go @@ -26,11 +26,23 @@ func (d *Data) GetThread(id uuid.UUID, user *models.User) (*models.Thread, error err := d.db. Joins("Account"). Where("Account.user_id = ?", user.ID). + Where("status != ?", models.ThreadDone). First(&thread, id). Error return &thread, err } +func (d *Data) GetThreads(user *models.User) ([]models.Thread, error) { + var threads []models.Thread + err := d.db. + Preload("Tweets"). + Joins("Account"). + Where("Account.user_id = ?", user.ID). + Find(&threads). + Error + return threads, err +} + func (d *Data) GetTweetsForThread(thread *models.Thread) ([]models.Tweet, error) { var tweets []models.Tweet err := d.db. diff --git a/backend/internal/logic/thread.go b/backend/internal/logic/thread.go index e5abf9c..3b7fb6f 100644 --- a/backend/internal/logic/thread.go +++ b/backend/internal/logic/thread.go @@ -45,3 +45,7 @@ func (l *Logic) UpdateThread(thread *models.Thread, user *models.User) error { err = l.ctx.Data.UpdateThread(thread) return err } + +func (l *Logic) GetThreads(user *models.User) ([]models.Thread, error) { + return l.ctx.Data.GetThreads(user) +} diff --git a/backend/internal/presentation/thread.go b/backend/internal/presentation/thread.go index f761706..37e1f29 100644 --- a/backend/internal/presentation/thread.go +++ b/backend/internal/presentation/thread.go @@ -38,6 +38,7 @@ func UpdateThread(ctx *web.Context) { thread.ID, err = uuid.FromString(ctx.Params.ByName("id")) if err != nil { ErrorResponse(ctx, err) + return } err = ctx.AppCtx.Logic.UpdateThread(&thread, ctx.Session.User) @@ -52,3 +53,17 @@ func UpdateThread(ctx *web.Context) { return } } + +func GetThreads(ctx *web.Context) { + threads, err := ctx.AppCtx.Logic.GetThreads(ctx.Session.User) + if err != nil { + ErrorResponse(ctx, err) + return + } + + err = ctx.WriteJSON(&threads) + if err != nil { + ErrorResponse(ctx, err) + return + } +} diff --git a/backend/internal/router/routes.go b/backend/internal/router/routes.go index d86e70a..e0f8cb9 100644 --- a/backend/internal/router/routes.go +++ b/backend/internal/router/routes.go @@ -27,6 +27,7 @@ func Setup(ctx *app.Context) http.Handler { router.POST("/account/", authenticated(AddAccount)) router.POST("/account/:id", authenticated(AddAccountResolve)) + router.GET("/thread", authenticated(GetThreads)) router.POST("/thread/", authenticated(AddThread)) router.PUT("/thread/:id", authenticated(UpdateThread))