@@ -7,11 +7,11 @@ import (
7
7
"path/filepath"
8
8
"sync"
9
9
10
- "github.com/chez-shanpu/secretary/pkg/slack"
11
-
12
10
"github.com/chez-shanpu/secretary/constants"
11
+ "github.com/chez-shanpu/secretary/pkg/slack"
13
12
14
13
"github.com/gin-gonic/gin"
14
+ _ "github.com/go-sql-driver/mysql"
15
15
"github.com/jmoiron/sqlx"
16
16
"github.com/spf13/cobra"
17
17
"github.com/spf13/viper"
@@ -47,15 +47,18 @@ func init() {
47
47
_ = viper .BindEnv ("LAB_DB_NAME" )
48
48
_ = viper .BindEnv ("LAB_SLACK_TOKEN" )
49
49
_ = viper .BindEnv ("LAB_SLACK_CHANNEL" )
50
+ _ = viper .BindEnv ("LAB_SLACK_COMING_CHANNEL" )
50
51
51
52
// required
52
53
_ = runCmd .MarkFlagRequired ("config-path" )
53
54
}
54
55
55
56
func runServer (cmd * cobra.Command , args []string ) {
57
+ var err error
58
+
56
59
// db
57
60
dataSrcName := fmt .Sprintf ("%s:%s@/%s" , viper .Get ("LAB_DB_USER" ), viper .Get ("LAB_DB_PASSWORD" ), viper .Get ("LAB_DB_NAME" ))
58
- db , err : = sqlx .Open ("mysql" , dataSrcName )
61
+ db , err = sqlx .Open ("mysql" , dataSrcName )
59
62
if err != nil {
60
63
log .Fatalf ("[ERROR] sqlx.open: %s" , err )
61
64
}
@@ -74,11 +77,16 @@ func runServer(cmd *cobra.Command, args []string) {
74
77
r .GET ("/status" , getStatus )
75
78
r .POST ("/event" , postEvent )
76
79
77
- r .Run ()
80
+ r .Run (":8080" )
78
81
}
79
82
80
83
func getStatus (c * gin.Context ) {
81
84
username := c .Query ("name" )
85
+ if username == "" {
86
+ c .JSON (http .StatusBadRequest , gin.H {"message" : "please input name parameter" })
87
+ return
88
+ }
89
+
82
90
status , err := getCurrentStatus (username )
83
91
if err != nil {
84
92
log .Printf ("[ERROR] getCurrentStatus db GET: %s" , err )
@@ -126,7 +134,10 @@ func postEvent(c *gin.Context) {
126
134
wg .Done ()
127
135
}(req .Username , nowStatus )
128
136
go func (u , s string ) {
129
- sendMessage (u , s )
137
+ err := sendMessage (u , s )
138
+ if err != nil {
139
+ log .Printf ("[ERROR] sendMessage: %s" , err )
140
+ }
130
141
wg .Done ()
131
142
}(req .Username , nowStatus )
132
143
wg .Wait ()
@@ -147,22 +158,33 @@ func sendMessage(username, status string) error {
147
158
return err
148
159
}
149
160
if status == constants .LabEventCome {
150
- msgStr = fmt .Sprintf ("おかえりなさいませ,%s様! \n 今日も一日頑張りましょう!" , slackUsername )
161
+ msgStr = fmt .Sprintf ("おかえりなさいませ,@ %s様! \n 今日も一日頑張りましょう!" , slackUsername )
151
162
} else {
152
- msgStr = fmt .Sprintf ("お疲れ様でした,%s様! \n 帰り道気をつけてくださいね!" , slackUsername )
163
+ msgStr = fmt .Sprintf ("お疲れ様でした,@ %s様! \n 帰り道気をつけてくださいね!" , slackUsername )
153
164
}
154
165
155
166
token := viper .GetString ("LAB_SLACK_TOKEN" )
156
167
ch := viper .GetString ("LAB_SLACK_CHANNEL" )
157
168
mi := slack .NewSlackMessageInfo (token , ch , msgStr )
158
169
err = mi .PostMessage ()
170
+ if err != nil {
171
+ return err
172
+ }
173
+
174
+ if status != constants .LabEventCome {
175
+ return nil
176
+ }
177
+ msgStr = fmt .Sprintf ("@%s様がいらっしゃいました." , slackUsername )
178
+ ch = viper .GetString ("LAB_SLACK_COMING_CHANNEL" )
179
+ mi = slack .NewSlackMessageInfo (token , ch , msgStr )
180
+ err = mi .PostMessage ()
159
181
return err
160
182
}
161
183
162
184
func getCurrentStatus (username string ) (string , error ) {
163
185
var todayEventNum int
164
186
165
- err := db .Get (& todayEventNum , "SELECT count(*) FROM lab_event WHERE username=? created_at > CURRENT_DATE" , username )
187
+ err := db .Get (& todayEventNum , "SELECT count(*) FROM lab_events WHERE username=? AND created_at > CURRENT_DATE" , username )
166
188
if err != nil {
167
189
return "" , err
168
190
}
@@ -177,7 +199,7 @@ func getCurrentStatus(username string) (string, error) {
177
199
func convertSlackUsername (name string ) (string , error ) {
178
200
configPath := viper .Get ("secretary.lab.config" )
179
201
path , fileName := filepath .Split (configPath .(string ))
180
- fileNameExt := filepath .Ext (path )
202
+ fileNameExt := filepath .Ext (fileName )
181
203
fileName = fileName [0 : len (fileName )- len (fileNameExt )]
182
204
183
205
viper .SetConfigName (fileName )
0 commit comments