@@ -2,11 +2,13 @@ package server
22
33import (
44 "encoding/base64"
5+ "encoding/json"
56 "fmt"
67 "log/slog"
78 "net/http"
89
910 "github.com/aisa-it/aiplan-mem/internal/config"
11+ "github.com/aisa-it/aiplan-mem/internal/dao"
1012 "github.com/aisa-it/aiplan-mem/internal/db"
1113 "github.com/gofrs/uuid/v5"
1214 "github.com/labstack/echo/v4"
@@ -34,6 +36,12 @@ func RunServer(cfg *config.Config, ds *db.DataStore) {
3436 lastSeenGroup .POST ("/:userId" , s .postUserLastSeen )
3537 }
3638
39+ emailCodeGroup := e .Group ("/emailCodes" )
40+ {
41+ emailCodeGroup .POST ("/:userId/verify" , s .verifyEmailCode )
42+ emailCodeGroup .POST ("/:userId" , s .saveEmailCode )
43+ }
44+
3745 if err := e .Start (cfg .ListenAddr ); err != nil {
3846 slog .Error ("Start http server" , "err" , err )
3947 }
@@ -90,3 +98,35 @@ func (s *Server) postUserLastSeen(c echo.Context) error {
9098 }
9199 return c .NoContent (http .StatusOK )
92100}
101+
102+ // EmailCodes handlers
103+
104+ func (s * Server ) saveEmailCode (c echo.Context ) error {
105+ userId := uuid .FromStringOrNil (c .Param ("userId" ))
106+ email := c .QueryParam ("email" )
107+
108+ code , err := s .DataStore .EmailCodes .GenCode (userId , email )
109+ if err != nil {
110+ return sendError (c , err )
111+ }
112+
113+ c .Response ().Header ().Set ("code" , fmt .Sprint (code ))
114+ return c .NoContent (http .StatusOK )
115+ }
116+
117+ func (s * Server ) verifyEmailCode (c echo.Context ) error {
118+ userId := uuid .FromStringOrNil (c .Param ("userId" ))
119+
120+ var req dao.EmailCodeData
121+ if err := json .NewDecoder (c .Request ().Body ).Decode (& req ); err != nil {
122+ return sendError (c , err )
123+ }
124+
125+ verify , err := s .DataStore .EmailCodes .VerifyCode (userId , req .NewEmail , req .Code )
126+ if err != nil {
127+ return sendError (c , err )
128+ }
129+
130+ c .Response ().Header ().Set ("verify" , fmt .Sprint (verify ))
131+ return c .NoContent (http .StatusOK )
132+ }
0 commit comments