MatsDahlberg / clinicalDB

0 stars 0 forks source link

Comment CRUD suggestion #1

Open robinandeer opened 10 years ago

robinandeer commented 10 years ago

CRUD for family comments

GET /families/:family_id/comments - list all comments GET /families/:family_id/comments/:comment_id - get comment by ID POST /families/:family_id/comments - create a new comment PUT /families/:family_id/comments/:comment_id - Update a comment DELETE /families/:family_id/comments/:comment_id - Delete a comment

Create fields: all as before - I send a JSON document Editable fields: user_comment, log_date, log_column, position_in_column

CRUD for variant comments

GET /variants/:variant_id/comments - list all comments GET /variants/:variant_id/comments/:comment_id - get comment by ID POST /variants/:variant_id/comments - create a new comment PUT /variants/:variant_id/comments/:comment_id - Update a comment DELETE /variants/:variant_id/comments/:comment_id - Delete a comment

Create fields: all as before - I send a JSON document Editable fields: rating, comment_date, variant_comment

MatsDahlberg commented 10 years ago

Looks good, I will start with it and come back with questions if there are any.

MatsDahlberg commented 10 years ago

Hur kommer din data att se ut. En comment åt gången eller alla comments som tillhör familjen?

Om man skickar en comment så kommer det att motsvara detta curl-anrop: curl -X POST -H "Content-Type: application/json" -d '{ "family": "1", user_comment":"Negative", "log_column":"IEM", "position_in_column":"conclusion", "email":"bla_bla@gmail.com"}' http://localhost:8082/families/1/comments

robinandeer commented 10 years ago

Helst vill jag kunna skicka en comment i taget.

Däremot behövs ingen GET route för fråga om en enskild comment.

MatsDahlberg commented 10 years ago

Bra det passar mig bäst.

Om du skickar en JSON som ser ut så här så kommer det att funka bra tror jag:

{ "family": "1",
"user_comment":"Negative",
"log_column":"IEM",
"position_in_column":"conclusion",
"email":"bla_bla@gmail.com"}
robinandeer commented 10 years ago

Kör du med "family" eller "family_id"? För att markera en foreign key...

MatsDahlberg commented 10 years ago

Spelar ingen roll för min del.

robinandeer commented 10 years ago

Okej, nej det är ingen stor grej. Men finns det något unikt ID per kommentar? Om det finns får du gärna skicka med det, annars är det ingen fara.

MatsDahlberg commented 10 years ago

Ja, varje kommentar har en 'primary key' i databasen så det finns. Men Anna ville att varje användare bara skulle kunna ha en kommentar per log_typ och log_position så jag tror inte att vi behöver bry oss om det?

Om det redan finns en kommentar för en användare i 'IEM', 'conclusion' så skriver jag över den med den nya datan.

robinandeer commented 10 years ago

Alright. Nej, då går det nog bra att strunta i det :)

MatsDahlberg commented 10 years ago

Nu finns det stöd för:

GET /families/:family_id/comments - list all comments POST /families/:family_id/comments - create a new comment PUT /families/:family_id/comments/:comment_id - Update a comment DELETE /families/:family_id/comments/:comment_id - Delete a comment

den JSON som förväntas vara 'body' är:

{ "family": "1",
"user_comment":"Negative",
"log_column":"IEM",
"position_in_column":"conclusion",
"email":"bla_bla@gmail.com"}

Date sätts alltid automatiskt av databasen.

MatsDahlberg commented 10 years ago

PUT anropar POST metoden så dom två beter sig på precis samma sätt. Om det inte finns en kommentar för familj,log_column, position,email så kommer den att skapas. Det redan finns en post så lpmmer den att ersättas med den nya informationen.

MatsDahlberg commented 10 years ago

Nu finns det även:

GET /variants/:variant_id/comments - list all comments POST /variants/:variant_id/comments - create a new comment PUT /variants/:variant_id/comments/:comment_id - Update a comment DELETE /variants/:variant_id/comments/:comment_id - Delete a comment

POST och PUT förväntar sig att det finns en body med följande JSON: { "rating":"TOP", "variant_comment":"Heja", "email":"kalle_kula@scilifelab.se"}

DELETE vill ha en JSON som ser ut: { "email":"kalle_kula@scilifelab.se"}

robinandeer commented 10 years ago

Men förstår jag rätt då om man skulle kunna skicka som: PUT /variants/:variant_id/comments/:email DELETE /variants/:variant_id/comments/:email

Där dynamiska delen "email" fungerar som "comment_id"

MatsDahlberg commented 10 years ago

Visst skulle man kunna göra så, men känns det inte som man missbrukar PUT, POST mekanismen då? Man begränsar dessutom hur lång en kommentar kan vara.

Men det kanske är ok?

robinandeer commented 10 years ago

Absolut, jag menade bara isf vad jag ska skicka med URL-parametern "comment_id". För den skickar du inte med i GET, eller hur?

Alltså är "comment_id" i vårt fall i praktiken användarens email. Sedan skickar jag såklart en payload med data till POST och PUT precis som du beskrivit.

Jag antar att det som skulle vara skillnaden är DELETE. Tror inte ens att de är möjligt att skicka data till DELETE, utan där måste all information ingå i URL-en. http://stackoverflow.com/questions/15088955/how-to-pass-data-in-the-ajax-delete-request-other-than-headers

2014-01-29 Mats Dahlberg notifications@github.com

Visst skulle man kunna göra så, men känns det inte som man missbrukar PUT, POST mekanismen då? Man begränsar dessutom hur lång en kommentar kan vara.

Men det kanske är ok?

Reply to this email directly or view it on GitHubhttps://github.com/MatsDahlberg/clinicalDB/issues/1#issuecomment-33576629 .

Robin Andeer robin.andeer@gmail.com

MatsDahlberg commented 10 years ago

Ahh, visst. DELETE borde funka med att anropa med: /variants/1627432/comments/kalle_kula@gmail.com

Mitt test av funktionen var:

curl -X DELETE -H "Content-Type: application/json" -d '{ "email":"kalle_kula@scilifelab.se"}' http://localhost:8082/variants/1627432/comments
robinandeer commented 10 years ago

Skickar du tillbaka något efter POST?

Kan vara fel i min kod, men jag tänkte bara höra.

POST /api/v1/variants/1627427/comments

MatsDahlberg commented 10 years ago

Nej, jag skickar ingenting. Men om du vill kan jag skicka ngt.

Jag kan returnera GET efter att jag fått en POST, PUT eller DELETE.

robinandeer commented 10 years ago

Ja, du får gärna skicka tillbaka specifikt det datum (och userName?) du sätter på kommentaren, men skicka helst alla fält som i en normal GET request.

Jag lyssnar på success/fail response.

MatsDahlberg commented 10 years ago

Nu har jag gjort så att POST, PUT eller DELETE anropar med en GET efter att databasen har modifierats.