-
Notifications
You must be signed in to change notification settings - Fork 0
/
projectedit.go
125 lines (110 loc) · 3.84 KB
/
projectedit.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package cproject
import (
"fmt"
"github.com/pkg/errors"
"github.com/valyala/fasthttp"
"admini.dev/admini/app"
"admini.dev/admini/app/controller"
"admini.dev/admini/app/controller/cutil"
"admini.dev/admini/app/project"
"admini.dev/admini/views/vproject"
)
func ProjectNew(rc *fasthttp.RequestCtx) {
controller.Act("project.new", rc, func(as *app.State, ps *cutil.PageState) (string, error) {
ps.Title = "New Project"
p := &project.Project{}
ps.Data = p
avail, err := as.Services.Sources.List(ps.Logger)
if err != nil {
return "", errors.Wrap(err, "unable to list sources")
}
return controller.Render(rc, as, &vproject.New{Project: p, AvailableSources: avail}, ps, "projects", "New")
})
}
func ProjectInsert(rc *fasthttp.RequestCtx) {
controller.Act("project.insert", rc, func(as *app.State, ps *cutil.PageState) (string, error) {
frm, err := cutil.ParseForm(rc)
if err != nil {
return "", errors.Wrap(err, "unable to parse form")
}
key, err := frm.GetString("key", false)
if err != nil {
return controller.FlashAndRedir(false, err.Error(), "/project/_new", rc, ps)
}
title := frm.GetStringOpt("title")
icon := frm.GetStringOpt("icon")
description := frm.GetStringOpt("description")
sources, err := frm.GetStringArray("sources", true)
if err != nil {
return "", err
}
ret := &project.Project{Key: key, Title: title, Icon: icon, Description: description, Sources: sources}
err = as.Services.Projects.Save(ret, false, ps.Logger)
if err != nil {
return "", errors.Wrap(err, "unable to save project")
}
return controller.FlashAndRedir(true, "saved new project", fmt.Sprintf("/project/%s", key), rc, ps)
})
}
func ProjectEdit(rc *fasthttp.RequestCtx) {
controller.Act("project.edit", rc, func(as *app.State, ps *cutil.PageState) (string, error) {
key, err := cutil.RCRequiredString(rc, "key", false)
if err != nil {
return "", err
}
prj, err := as.Services.Projects.LoadRequired(key, false, ps.Logger)
if err != nil {
return "", errors.Wrapf(err, "unable to load project [%s]", key)
}
ps.Title = fmt.Sprintf("Edit [%s]", prj.Name())
ps.Data = prj
avail, err := as.Services.Sources.List(ps.Logger)
if err != nil {
return "", errors.Wrap(err, "unable to list sources")
}
return controller.Render(rc, as, &vproject.Edit{Project: prj, AvailableSources: avail}, ps, "projects", prj.Key, "Edit")
})
}
func ProjectSave(rc *fasthttp.RequestCtx) {
controller.Act("project.save", rc, func(as *app.State, ps *cutil.PageState) (string, error) {
frm, err := cutil.ParseForm(rc)
if err != nil {
return "", errors.Wrap(err, "unable to parse form")
}
key, err := cutil.RCRequiredString(rc, "key", false)
if err != nil {
return "", err
}
prj, err := as.Services.Projects.LoadRequired(key, false, ps.Logger)
if err != nil {
return "", errors.Wrapf(err, "unable to load project [%s]", key)
}
prj.Title = frm.GetStringOpt("title")
prj.Icon = frm.GetStringOpt("icon")
prj.Description = frm.GetStringOpt("description")
prj.Sources, err = frm.GetStringArray("sources", true)
if err != nil {
return "", err
}
err = as.Services.Projects.Save(prj, true, ps.Logger)
if err != nil {
return "", errors.Wrapf(err, "unable to save project [%s]", key)
}
msg := fmt.Sprintf(`saved project %q`, key)
return controller.FlashAndRedir(true, msg, fmt.Sprintf("/project/%s", key), rc, ps)
})
}
func ProjectDelete(rc *fasthttp.RequestCtx) {
controller.Act("project.delete", rc, func(as *app.State, ps *cutil.PageState) (string, error) {
key, err := cutil.RCRequiredString(rc, "key", false)
if err != nil {
return "", err
}
err = as.Services.Projects.Delete(key, ps.Logger)
if err != nil {
return "", errors.Wrapf(err, "unable to delete project [%s]", key)
}
msg := fmt.Sprintf(`deleted project %q`, key)
return controller.FlashAndRedir(true, msg, "/project", rc, ps)
})
}