Resolves #23 add endpoint to unpin conversations
parent
fffda5271b
commit
6c24851b98
67
README.md
67
README.md
|
@ -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*
|
||||
|
||||
```
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue