Skip to content

Commit

Permalink
refactor: admin
Browse files Browse the repository at this point in the history
  • Loading branch information
acoshift committed Apr 12, 2019
1 parent 6127f67 commit be58868
Show file tree
Hide file tree
Showing 11 changed files with 235 additions and 334 deletions.
13 changes: 5 additions & 8 deletions internal/app/admin/course.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,26 @@ import (
"github.com/moonrhythm/hime"

"github.com/acoshift/acourse/internal/app/view"
"github.com/acoshift/acourse/internal/pkg/bus"
"github.com/acoshift/acourse/internal/pkg/model/admin"
"github.com/acoshift/acourse/internal/pkg/admin"
)

func getCourses(ctx *hime.Context) error {
cnt := admin.CountCourses{}
err := bus.Dispatch(ctx, &cnt)
cnt, err := admin.CountCourses(ctx)
if err != nil {
return err
}

pg, _ := strconv.ParseInt(ctx.FormValue("page"), 10, 64)
pn := paginate.New(pg, 30, cnt.Result)
pn := paginate.New(pg, 30, cnt)

list := admin.ListCourses{Limit: pn.Limit(), Offset: pn.Offset()}
err = bus.Dispatch(ctx, &list)
list, err := admin.GetCourses(ctx, pn.Limit(), pn.Offset())
if err != nil {
return err
}

p := view.Page(ctx)
p.Data["Navbar"] = "admin.courses"
p.Data["Courses"] = list.Result
p.Data["Courses"] = list
p.Data["Paginate"] = pn
return ctx.View("admin.courses", p)
}
31 changes: 12 additions & 19 deletions internal/app/admin/payment.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,22 @@ import (
"github.com/moonrhythm/hime"

"github.com/acoshift/acourse/internal/app/view"
"github.com/acoshift/acourse/internal/pkg/admin"
"github.com/acoshift/acourse/internal/pkg/app"
"github.com/acoshift/acourse/internal/pkg/bus"
"github.com/acoshift/acourse/internal/pkg/model/admin"
"github.com/acoshift/acourse/internal/pkg/payment"
)

func getRejectPayment(ctx *hime.Context) error {
id := ctx.FormValue("id")

q := admin.GetPayment{PaymentID: id}
err := bus.Dispatch(ctx, &q)
x, err := admin.GetPayment(ctx, id)
if err == app.ErrNotFound {
return ctx.RedirectTo("admin.payments.pending")
}
if err != nil {
return err
}

x := &q.Result
name := x.User.Name
if len(name) == 0 {
name = x.User.Username
Expand Down Expand Up @@ -76,7 +73,7 @@ func postRejectPayment(ctx *hime.Context) error {
id := ctx.FormValue("id")
message := ctx.PostFormValue("message")

err := bus.Dispatch(ctx, &admin.RejectPayment{ID: id, Message: message})
err := admin.RejectPayment(ctx, id, message)
if app.IsUIError(err) {
return ctx.Status(http.StatusBadRequest).String(err.Error())
}
Expand All @@ -92,7 +89,7 @@ func postPendingPayment(ctx *hime.Context) error {

id := ctx.PostFormValue("id")
if action == "accept" {
err := bus.Dispatch(ctx, &admin.AcceptPayment{ID: id, Location: ctx.Global("location").(*time.Location)})
err := admin.AcceptPayment(ctx, id, ctx.Global("location").(*time.Location))
if app.IsUIError(err) {
return ctx.Status(http.StatusBadRequest).String(err.Error())
}
Expand All @@ -105,47 +102,43 @@ func postPendingPayment(ctx *hime.Context) error {
}

func getPendingPayments(ctx *hime.Context) error {
cnt := admin.CountPayments{Status: []int{payment.Pending}}
err := bus.Dispatch(ctx, &cnt)
cnt, err := admin.CountPayments(ctx, []int{payment.Pending})
if err != nil {
return err
}

pg, _ := strconv.ParseInt(ctx.FormValue("page"), 10, 64)
pn := paginate.New(pg, 30, cnt.Result)
pn := paginate.New(pg, 30, cnt)

list := admin.ListPayments{Status: []int{payment.Pending}, Limit: pn.Limit(), Offset: pn.Offset()}
err = bus.Dispatch(ctx, &list)
list, err := admin.GetPayments(ctx, []int{payment.Pending}, pn.Limit(), pn.Offset())
if err != nil {
return err
}

p := view.Page(ctx)
p.Data["Navbar"] = "admin.payment.pending"
p.Data["Payments"] = list.Result
p.Data["Payments"] = list
p.Data["Paginate"] = pn
return ctx.View("admin.payments", p)
}

func getHistoryPayments(ctx *hime.Context) error {
cnt := admin.CountPayments{Status: []int{payment.Accepted, payment.Rejected}}
err := bus.Dispatch(ctx, &cnt)
cnt, err := admin.CountPayments(ctx, []int{payment.Accepted, payment.Rejected})
if err != nil {
return err
}

pg, _ := strconv.ParseInt(ctx.FormValue("page"), 10, 64)
pn := paginate.New(pg, 30, cnt.Result)
pn := paginate.New(pg, 30, cnt)

list := admin.ListPayments{Status: []int{payment.Accepted, payment.Rejected, payment.Refunded}, Limit: pn.Limit(), Offset: pn.Offset()}
err = bus.Dispatch(ctx, &list)
list, err := admin.GetPayments(ctx, []int{payment.Accepted, payment.Rejected, payment.Refunded}, pn.Limit(), pn.Offset())
if err != nil {
return err
}

p := view.Page(ctx)
p.Data["Navbar"] = "admin.payment.history"
p.Data["Payments"] = list.Result
p.Data["Payments"] = list
p.Data["Paginate"] = pn
return ctx.View("admin.payments", p)
}
13 changes: 5 additions & 8 deletions internal/app/admin/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,26 @@ import (
"github.com/moonrhythm/hime"

"github.com/acoshift/acourse/internal/app/view"
"github.com/acoshift/acourse/internal/pkg/bus"
"github.com/acoshift/acourse/internal/pkg/model/admin"
"github.com/acoshift/acourse/internal/pkg/admin"
)

func getUsers(ctx *hime.Context) error {
cnt := admin.CountUsers{}
err := bus.Dispatch(ctx, &cnt)
cnt, err := admin.CountUsers(ctx)
if err != nil {
return err
}

pg, _ := strconv.ParseInt(ctx.FormValue("page"), 10, 64)
pn := paginate.New(pg, 30, cnt.Result)
pn := paginate.New(pg, 30, cnt)

list := admin.ListUsers{Limit: pn.Limit(), Offset: pn.Offset()}
err = bus.Dispatch(ctx, &list)
list, err := admin.GetUsers(ctx, pn.Limit(), pn.Offset())
if err != nil {
return err
}

p := view.Page(ctx)
p.Data["Navbar"] = "admin.users"
p.Data["Users"] = list.Result
p.Data["Users"] = list
p.Data["Paginate"] = pn
return ctx.View("admin.users", p)
}
2 changes: 0 additions & 2 deletions internal/app/editor/course.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (

"github.com/acoshift/acourse/internal/app/view"
"github.com/acoshift/acourse/internal/pkg/app"
"github.com/acoshift/acourse/internal/pkg/bus"
"github.com/acoshift/acourse/internal/pkg/context/appctx"
"github.com/acoshift/acourse/internal/pkg/course"
)
Expand Down Expand Up @@ -54,7 +53,6 @@ func postCourseCreate(ctx *hime.Context) error {
}

link, _ := course.GetURL(ctx, courseID)
bus.Dispatch(ctx, &link)
if link == "" {
return ctx.RedirectTo("app.course", courseID)
}
Expand Down
78 changes: 78 additions & 0 deletions internal/pkg/admin/course.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package admin

import (
"context"
"time"

"github.com/acoshift/pgsql"

"github.com/acoshift/acourse/internal/pkg/context/sqlctx"
"github.com/acoshift/acourse/internal/pkg/course"
)

// CourseItem type
type CourseItem struct {
ID string
Title string
Image string
Type int
Price float64
Discount float64
URL string
CreatedAt time.Time
UpdatedAt time.Time
Option course.Option
Owner struct {
ID string
Username string
Image string
}
}

func GetCourses(ctx context.Context, limit, offset int64) ([]*CourseItem, error) {
rows, err := sqlctx.Query(ctx, `
select
c.id, c.title, c.image,
c.url, c.type, c.price, c.discount,
c.created_at, c.updated_at,
opt.public, opt.enroll, opt.attend, opt.assignment, opt.discount,
u.id, u.username, u.image
from courses as c
left join course_options as opt on opt.course_id = c.id
left join users as u on u.id = c.user_id
order by c.created_at desc
limit $1 offset $2
`, limit, offset)
if err != nil {
return nil, err
}
defer rows.Close()

var xs []*CourseItem
for rows.Next() {
var x CourseItem
err = rows.Scan(
&x.ID, &x.Title, &x.Image,
pgsql.NullString(&x.URL), &x.Type, &x.Price, &x.Discount,
&x.CreatedAt, &x.UpdatedAt,
&x.Option.Public, &x.Option.Enroll, &x.Option.Attend, &x.Option.Assignment, &x.Option.Discount,
&x.Owner.ID, &x.Owner.Username, &x.Owner.Image,
)
if err != nil {
return nil, err
}
xs = append(xs, &x)
}
if err = rows.Err(); err != nil {
return nil, err
}

return xs, nil
}

func CountCourses(ctx context.Context) (cnt int64, err error) {
err = sqlctx.QueryRow(ctx,
`select count(*) from courses`,
).Scan(&cnt)
return
}
Loading

0 comments on commit be58868

Please sign in to comment.