4
1
Fork 0

Resolves #23 add endpoint to unpin conversations

master
Daniel Lim 2019-11-05 03:29:12 +08:00
parent fffda5271b
commit 6c24851b98
3 changed files with 94 additions and 19 deletions

View File

@ -25,26 +25,28 @@ Supply environment variables by either exporting them or editing ```.env```.
Unless otherwise noted, bodies and responses are with `Content-Type: application/json`. Endpoints marked with a ```*``` require a populated `X-User-Claim` header from `backend-auth`.
| Contents |
| -------- |
| [Create User](#Create-User) |
| [Get Users by Phone](#Get-Users-by-Phone) |
| [Get User by ID](#Get-User-by-ID) |
| [Get User by Username](#Get-User-by-Username) ]
| [Update User](#Update-User) |
| [Create Conversation](#Create-Conversation) |
| [Delete Conversation](#Delete-Conversation) |
| [Update Conversation](#Update-Conversation) |
| [Get Conversations](#Get-Conversations) |
| [Get Conversation](#Get-Conversation) |
| Contents |
| --------------------------------------------------------- |
| [Create User](#Create-User) |
| [Get Users by Phone](#Get-Users-by-Phone) |
| [Get User by ID](#Get-User-by-ID) |
| [Get User by Username](#Get-User-by-Username) |
| [Update User](#Update-User) |
| [Create Conversation](#Create-Conversation) |
| [Delete Conversation](#Delete-Conversation) |
| [Update Conversation](#Update-Conversation) |
| [Get Conversations](#Get-Conversations) |
| [Get Conversation](#Get-Conversation) |
| [Pin Conversation](#Pin-Conversation) |
| [Unpin Conversation](#Unpin-Conversation) |
| [Create Conversation Member](#Create-Conversation-Member) |
| [Get Conversation Members](#Get-Conversation-Members) |
| [Create Contact](#Create-Contact) |
| [Get Contacts](#Get-Contacts) |
| [Subscribe Contact](#Subscribe-Contact) |
| [Subscribe Conversation](#Subscribe-Conversation) |
| [Subscribe User](#Subscribe-User) |
| [Subscribe Member](#Subscribe-Member) |
| [Get Conversation Members](#Get-Conversation-Members) |
| [Create Contact](#Create-Contact) |
| [Get Contacts](#Get-Contacts) |
| [Subscribe Contact](#Subscribe-Contact) |
| [Subscribe Conversation](#Subscribe-Conversation) |
| [Subscribe User](#Subscribe-User) |
| [Subscribe Member](#Subscribe-Member) |
---
@ -442,6 +444,33 @@ Blank body.
---
### Unpin Conversation
```
DELETE /user/conversation/:conversation/pin
```
Unmark the specified conversation as pinned.
#### URL Params
| Name | Type | Description | Required |
| ---- | ---- | ----------- | -------- |
| conversation | String | Conversation's ID. | ✓ |
#### Success Response (200 OK)
Blank body.
#### Errors
| Code | Description |
| ---- | ----------- |
| 400 | Invalid `X-User-Claim` header. |
| 404 | Conversation with supplied ID could not be found in database. |
| 500 | Error occurred editing entry in the database. |
---
### Create Conversation Member*
```

View File

@ -487,3 +487,48 @@ func (h *Handler) PinConversation(w http.ResponseWriter, r *http.Request, p http
w.WriteHeader(200)
}
func (h *Handler) UnpinConversation(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
conversationID := p.ByName("conversation")
userID := r.Context().Value("user").(string)
// Check relation exists
var exists int
err := h.db.QueryRow(`SELECT 1 FROM member WHERE "user" = $1 AND "conversation" = $2`, userID, conversationID).Scan(&exists)
if err == sql.ErrNoRows {
http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
return
} else if err != nil {
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
return
}
// Update relation
_, err = h.db.Exec(`UPDATE "member" SET "pinned" = FALSE WHERE "user" = $1 AND "conversation" = $2`, userID, conversationID)
if err != nil {
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
return
}
// Publish NATs
if h.nc != nil {
member := Member{
User: userID,
Conversation: conversationID,
Pinned: false,
}
memberString, err := json.Marshal(&member)
if err == nil {
updateMsg := UpdateMsg{
Type: "update",
Data: string(memberString),
}
updateMsgString, err := json.Marshal(&updateMsg)
if err == nil {
h.nc.Publish("member", updateMsgString)
}
}
}
w.WriteHeader(200)
}

View File

@ -23,6 +23,7 @@ func NewRouter(h *Handler) *httprouter.Router {
router.PATCH("/user/conversation/:conversation", AuthMiddleware(h.UpdateConversation)) // USER MEMBER CONVERSATION ADMIN=true -> update conversation title
//router.DELETE("/user/:user/conversation/:conversation", h.DeleteConversation) // USER MEMBER CONVERSATION -> delete membership
router.POST("/user/conversation/:conversation/pin", AuthMiddleware(h.PinConversation))
router.DELETE("/user/conversation/:conversation/pin", AuthMiddleware(h.UnpinConversation))
router.POST("/user/conversation/:conversation/member", AuthMiddleware(h.CreateConversationMember)) // USER MEMBER CONVERSATION ADMIN=true -> create new membership
router.GET("/user/conversation/:conversation/member", AuthMiddleware(h.GetConversationMembers)) // USER MEMBER CONVERSATION
//router.DELETE("/user/:user/conversation/:conversation/member/:member", h.DeleteConversationMember) // USER MEMBER CONVERSATION ADMIN=true -> delete membership