diff --git a/internal/models/mocks/user.go b/internal/models/mocks/user.go index 25da0e3..c865e0f 100644 --- a/internal/models/mocks/user.go +++ b/internal/models/mocks/user.go @@ -25,6 +25,31 @@ type UserModel struct { Settings map[string]models.Setting } +func (m *UserModel) AddUserToGroup(userId int64, groupId models.UserGroupId) error { + //TODO implement me + panic("implement me") +} + +func (m *UserModel) BanUser(userId int64) error { + //TODO implement me + panic("implement me") +} + +func (m *UserModel) UpdateUser(u models.User) error { + //TODO implement me + panic("implement me") +} + +func (m *UserModel) UpdatePassword(userId int64, password string) error { + //TODO implement me + panic("implement me") +} + +func (m *UserModel) Delete(userId int64) error { + //TODO implement me + panic("implement me") +} + func (m *UserModel) InitializeSettingsMap() error { return nil } diff --git a/internal/models/user.go b/internal/models/user.go index f7d735c..6c38f9f 100644 --- a/internal/models/user.go +++ b/internal/models/user.go @@ -68,6 +68,9 @@ type UserModelInterface interface { GetNumberOfUsers() int AddUserToGroup(userId int64, groupId UserGroupId) error BanUser(userId int64) error + UpdateUser(u User) error + UpdatePassword(userId int64, password string) error + Delete(userId int64) error } func (m *UserModel) InitializeSettingsMap() error { @@ -475,6 +478,37 @@ func (m *UserModel) BanUser(userId int64) error { return nil } +func (m *UserModel) UpdateUser(u User) error { + stmt := `UPDATE users SET Email=?, Name=? WHERE Id=?` + _, err := m.DB.Exec(stmt, u.Email, u.Username, u.ID) + if err != nil { + return err + } + return nil +} + +func (m *UserModel) UpdatePassword(userId int64, password string) error { + hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), 12) + if err != nil { + return err + } + stmt := `UPDATE users SET HashedPassword=? WHERE Id=?` + _, err = m.DB.Exec(stmt, hashedPassword, userId) + if err != nil { + return err + } + return nil +} + +func (m *UserModel) Delete(userId int64) error { + stmt := `UPDATE users SET Deleted=? WHERE Id=?` + _, err := m.DB.Exec(stmt, time.Now().UTC().Format(time.RFC3339), userId) + if err != nil { + return err + } + return nil +} + func (m *UserModel) addUserToGroup(tx *sql.Tx, userId int64, groupId UserGroupId) error { stmt := `INSERT INTO users_groups (UserId, GroupId) VALUES (?, ?)` _, err := tx.Exec(stmt, userId, groupId) diff --git a/ui/views/admin.templ b/ui/views/admin.templ index 10247cd..c1e8038 100644 --- a/ui/views/admin.templ +++ b/ui/views/admin.templ @@ -39,7 +39,6 @@ templ adminSidebar() {
@@ -68,14 +67,14 @@ templ AdminPanelUsersView(title string, data CommonData, users []models.User) {| Username | Joined | ||||||
|---|---|---|---|---|---|---|---|
| Username | Joined | |||
|---|---|---|---|---|
| ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var11 string templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(u.Username) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/admin.templ`, Line: 74, Col: 51} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/admin.templ`, Line: 73, Col: 51} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, " | ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, " | ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var12 string templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(u.Created.Format(time.RFC3339)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/admin.templ`, Line: 75, Col: 44} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/admin.templ`, Line: 74, Col: 44} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, " | ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, " | ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var13 string templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(u.Email) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/admin.templ`, Line: 76, Col: 21} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/admin.templ`, Line: 75, Col: 21} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, " | ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var16 string templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(user.Username) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/admin.templ`, Line: 95, Col: 24} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/admin.templ`, Line: 94, Col: 24} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var17 string templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(user.Email) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/admin.templ`, Line: 99, Col: 21} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/admin.templ`, Line: 98, Col: 21} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var18 string templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(user.Created.Format(time.RFC3339)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/admin.templ`, Line: 103, Col: 44} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/views/admin.templ`, Line: 102, Col: 44} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "