Skip to content

Commit d755ce2

Browse files
committed
Fix Messages
1 parent 6b721cf commit d755ce2

File tree

8 files changed

+117
-2
lines changed

8 files changed

+117
-2
lines changed

android/app/src/main/java/com/httpsms/MainActivity.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ class MainActivity : AppCompatActivity() {
5353
Timber.d( "on activity resume")
5454
redirectToLogin()
5555
refreshToken(this)
56-
requestPermissions(this)
5756
}
5857

5958
private fun registerReceivers(context: Context) {

api/pkg/handlers/phone_handler.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ func NewPhoneHandler(
4141
func (h *PhoneHandler) RegisterRoutes(router fiber.Router) {
4242
router.Get("/phones", h.Index)
4343
router.Put("/phones", h.Upsert)
44+
router.Delete("/phones/:phoneID", h.Delete)
4445
}
4546

4647
// Index returns the phones of a user
@@ -130,3 +131,40 @@ func (h *PhoneHandler) Upsert(c *fiber.Ctx) error {
130131

131132
return h.responseOK(c, "phone updated successfully", phone)
132133
}
134+
135+
// Delete a phone
136+
// @Summary Delete Phone
137+
// @Description Delete a phone that has been sored in the database
138+
// @Security ApiKeyAuth
139+
// @Tags Phones
140+
// @Accept json
141+
// @Produce json
142+
// @Param phoneID path string true "ID of the phone" default(32343a19-da5e-4b1b-a767-3298a73703ca)
143+
// @Success 204 {object}
144+
// @Failure 400 {object} responses.BadRequest
145+
// @Failure 401 {object} responses.Unauthorized
146+
// @Failure 422 {object} responses.UnprocessableEntity
147+
// @Failure 500 {object} responses.InternalServerError
148+
// @Router /phones/{phoneID} [delete]
149+
func (h *PhoneHandler) Delete(c *fiber.Ctx) error {
150+
ctx, span := h.tracer.StartFromFiberCtx(c)
151+
defer span.End()
152+
153+
ctxLogger := h.tracer.CtxLogger(h.logger, span)
154+
155+
request := requests.PhoneDelete{PhoneID: c.Params("phoneID")}
156+
if errors := h.validator.ValidateDelete(ctx, request); len(errors) != 0 {
157+
msg := fmt.Sprintf("validation errors [%s], while deleting phone [%+#v]", spew.Sdump(errors), request)
158+
ctxLogger.Warn(stacktrace.NewError(msg))
159+
return h.responseUnprocessableEntity(c, errors, "validation errors while deleting phone")
160+
}
161+
162+
err := h.service.Delete(ctx, h.userIDFomContext(c), request.PhoneIDUuid())
163+
if err != nil {
164+
msg := fmt.Sprintf("cannot delete phones with params [%+#v]", request)
165+
ctxLogger.Error(stacktrace.Propagate(err, msg))
166+
return h.responseInternalServerError(c)
167+
}
168+
169+
return h.responseOK(c, "phone deleted successfully", nil)
170+
}

api/pkg/repositories/gorm_phone_repository.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55
"errors"
66
"fmt"
77

8+
"github.com/google/uuid"
9+
810
"github.com/NdoleStudio/http-sms-manager/pkg/entities"
911
"github.com/NdoleStudio/http-sms-manager/pkg/telemetry"
1012
"github.com/palantir/stacktrace"
@@ -31,6 +33,23 @@ func NewGormPhoneRepository(
3133
}
3234
}
3335

36+
// Delete an entities.Phone
37+
func (repository *gormPhoneRepository) Delete(ctx context.Context, userID entities.UserID, phoneID uuid.UUID) error {
38+
ctx, span := repository.tracer.Start(ctx)
39+
defer span.End()
40+
41+
err := repository.db.WithContext(ctx).
42+
Where("user_id = ?", userID).
43+
Where("id = ?", phoneID).
44+
Delete(&entities.Phone{}).Error
45+
if err != nil {
46+
msg := fmt.Sprintf("cannot delete phone with ID [%s] and userID [%s]", phoneID, userID)
47+
return repository.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
48+
}
49+
50+
return nil
51+
}
52+
3453
// Save a new entities.Phone
3554
func (repository *gormPhoneRepository) Save(ctx context.Context, phone *entities.Phone) error {
3655
ctx, span := repository.tracer.Start(ctx)

api/pkg/repositories/phone_repository.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package repositories
33
import (
44
"context"
55

6+
"github.com/google/uuid"
7+
68
"github.com/NdoleStudio/http-sms-manager/pkg/entities"
79
)
810

@@ -16,4 +18,7 @@ type PhoneRepository interface {
1618

1719
// Load a phone by user and phone number
1820
Load(ctx context.Context, userID entities.UserID, phoneNumber string) (*entities.Phone, error)
21+
22+
// Delete an entities.Phone
23+
Delete(ctx context.Context, userID entities.UserID, phoneID uuid.UUID) error
1924
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package requests
2+
3+
import (
4+
"github.com/google/uuid"
5+
)
6+
7+
// PhoneDelete is the payload for deleting
8+
type PhoneDelete struct {
9+
request
10+
PhoneID string `json:"phoneID" swaggerignore:"true"` // used internally for validation
11+
}
12+
13+
// PhoneIDUuid returns the phoneID as uuid.UUID
14+
func (input *PhoneDelete) PhoneIDUuid() uuid.UUID {
15+
return uuid.MustParse(input.PhoneID)
16+
}

api/pkg/services/notification_service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func (service *NotificationService) MessageSent(ctx context.Context, params *Not
6767
Token: *phone.FcmToken,
6868
})
6969
if err != nil {
70-
msg := fmt.Sprintf("cannot send notification for user [%s] to phone [%s]", params.MessageID, phone.ID)
70+
msg := fmt.Sprintf("cannot send notification for message [%s] to phone [%s]", params.MessageID, phone.ID)
7171
return service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
7272
}
7373

api/pkg/services/phone_service.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ func (service *PhoneService) Upsert(ctx context.Context, params PhoneUpsertParam
7171
return service.createPhone(ctx, params)
7272
}
7373

74+
if err != nil {
75+
msg := fmt.Sprintf("cannot upsert phone with id [%s] and number [%s]", phone.ID, phone.PhoneNumber)
76+
return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
77+
}
78+
7479
phone.FcmToken = &params.FcmToken
7580
if err = service.repository.Save(ctx, phone); err != nil {
7681
msg := fmt.Sprintf("cannot update phone with id [%s] and number [%s]", phone.ID, phone.PhoneNumber)
@@ -81,6 +86,24 @@ func (service *PhoneService) Upsert(ctx context.Context, params PhoneUpsertParam
8186
return phone, nil
8287
}
8388

89+
// Delete an entities.Phone
90+
func (service *PhoneService) Delete(ctx context.Context, userID entities.UserID, phoneID uuid.UUID) error {
91+
ctx, span := service.tracer.Start(ctx)
92+
defer span.End()
93+
94+
ctxLogger := service.tracer.CtxLogger(service.logger, span)
95+
96+
err := service.repository.Delete(ctx, userID, phoneID)
97+
if err != nil {
98+
msg := fmt.Sprintf("cannot delete phone with id [%s] and user id [%s]", phoneID, userID)
99+
return service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
100+
}
101+
102+
ctxLogger.Info(fmt.Sprintf("deleted phone with id [%s] and user id [%s]", phoneID, userID))
103+
104+
return nil
105+
}
106+
84107
func (service *PhoneService) createPhone(ctx context.Context, params PhoneUpsertParams) (*entities.Phone, error) {
85108
ctx, span := service.tracer.Start(ctx)
86109
defer span.End()

api/pkg/validators/phone_handler_validator.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,18 @@ func (validator *PhoneHandlerValidator) ValidateUpsert(_ context.Context, reques
7171

7272
return v.ValidateStruct()
7373
}
74+
75+
// ValidateDelete ValidateUpsert validates requests.PhoneDelete
76+
func (validator *PhoneHandlerValidator) ValidateDelete(_ context.Context, request requests.PhoneDelete) url.Values {
77+
v := govalidator.New(govalidator.Options{
78+
Data: &request,
79+
Rules: govalidator.MapData{
80+
"phoneID": []string{
81+
"required",
82+
"uuid",
83+
},
84+
},
85+
})
86+
87+
return v.ValidateStruct()
88+
}

0 commit comments

Comments
 (0)