# NP_COLLEGE PART 3 ###### tags: ```NCTU-Intro2NP``` :::info **The sequence diagrams below are just for reference. You can design those interactions by yourself.** ::: ## Commands in the previous part ### 1. register <username> <email> <password> **Success scenario** ```sequence client1->server: command \nregister <username>... Note over server: Valid username. server-->client1: Response client1->Amazon S3: create client1's bucket Amazon S3->client1: Amazon S3 API response. client1->server: metadata of the user. Note over server: Server stores \nthe metadata \nof the user. server-->client1: Success Note over client1: Register successfully. ``` **Failure scenario** **a. User is already used.** ```sequence client1->server: command \nregister <username>... Note over server: User is already used. server-->client1: Error response. Note over client1: User is already used. ``` ### 2. login <username> <password> **Success scenario** ```sequence client1->server: command \nlogin <username>... Note over server: Correct password and log in. server-->client1: Response client1->Amazon S3: Access client1's bucket Amazon S3->client1: Amazon S3 API response. ``` **Failure scenario** **a. client already logged in.** ```sequence client->server: command \nlogin <username>... Note over server: client already logged in. server-->client: Error response. Note over client: Please logout first. ``` **b. Username or password is incorrect.** ```sequence client->server: command \nlogin <username>... Note over server: Username or password is incorrect. server-->client: Error response. Note over client: Login failed. ``` ### 3. create-post <board_name> --title title --content <content> **Success scenario** ```sequence client1->server: command \ncreate-post <board_name>... Note over server: valid action. server-->client1: Response client1->client1 bucket: create the post object in client1's bucket client1 bucket->client1: Amazon S3 API response. client1->server: metadata of the post. Note over server: Server stores \nthe metadata \nof the post. server-->client1: Success Note over client1: Create post successfully. ``` **Failure scenario** **a. No user logged in.** ```sequence client->server: command \ncreate-post <board_name>... Note over server: client doesn't log in. server-->client: Error response. Note over client: Please login first. ``` **b. board doesn't exist.** ```sequence client1->server: command \ncreate-post <board_name>... Note over server: board doesn't exist. server-->client1: Error response. Note over client1: Board doesn't exist. ``` ### 4. read <post_id> **Success scenario** ```sequence client1->server: command \nread <post_id> Note over server: valid action. server-->client1: metadata of the post client1->post owner's bucket: get the content of the post post owner's bucket->client1: Amazon S3 API response. Note over client1: Print the post. ``` **Failure scenario** **a. Unknown <post_id>** ```sequence client1->server: command \nread <post_id> Note over server: post <post_id> doesn't exist. server-->client1: Error response. Note over client1: Post does not exist. ``` ### 5. update-post <post_id> --title/content <new> **Success scenario (title)** ```sequence client1->server: command \nupdate-post <post_id>... Note over server: update the title of the post. server-->client1: Response Note over client1: Update successfully. ``` **Success scenario (content)** ```sequence client1->server: command \nupdate-post <post_id>... Note over server: valid action. server-->client1: Response client1->client1 bucket: update the post object in client1's bucket client1 bucket->client1: Amazon S3 API response. Note over client1: Update successfully. ``` **Failure scenario** **a. No user logged in.** ```sequence client->server: command \nupdate-post <post_id>... Note over server: client doesn't log in. server-->client: Error response. Note over client: Please login first. ``` **b. Unknown <post_id>** ```sequence client1->server: command \nupdate-post <post_id>... Note over server: post <post_id> doesn't exist. server-->client1: Error response. Note over client1: Post does not exist. ``` **c. Not the post owner** ```sequence client1->server: command \nupdate-post <post_id>... Note over server: Not the post owner. server-->client1: Error response. Note over client1: Not the post owner. ``` ### 6. comment <post_id> <comment> **Success scenario** ```sequence client1->server: command \ncomment <post_id>... Note over server: valid action. server-->client1: metadata of the post client1->post owner's bucket: append <comment> to\n the content of the post post owner's bucket->client1: Amazon S3 API response. Note over client1: Comment successfully. ``` **Failure scenario** **a. No user logged in.** ```sequence client->server: command \ncomment <post_id>... Note over server: client doesn't log in. server-->client: Error response. Note over client: Please login first. ``` **b. Unknown <post_id>** ```sequence client1->server: command \ncomment <post_id>... Note over server: post <post_id> doesn't exist. server-->client1: Error response. Note over client1: Post does not exist. ``` ### 7. delete-post <post_id> **Success scenario** ```sequence client1->server: command \ndelete-post <post_id> Note over server: delete the metadata of the post. server-->client1: Response client1->client1 bucket: delete the post object from client1's bucket client1 bucket->client1: Amazon S3 API response. Note over client1: Delete successfully. ``` **Failure scenario** **a. No user logged in.** ```sequence client->server: command \ncomment <post_id>... Note over server: client doesn't log in. server-->client: Error response. Note over client: Please login first. ``` **b. Unknown <post_id>** ```sequence client1->server: command \ncomment <post_id>... Note over server: post <post_id> doesn't exist. server-->client1: Error response. Note over client1: Post does not exist. ``` **c. Not the post owner** ```sequence client1->server: command \nupdate-post <post_id>... Note over server: Not the post owner. server-->client1: Error response. Note over client1: Not the post owner. ``` ## New commands ### 1. mail-to <username> --subject <subject> --content <content> **Success scenario** ```sequence client1->server: command \nmail-to client2.. Note over server: client2 exists. server-->client1: client2's bucket name client1->client2 bucket: create mail in client2's bucket client2 bucket->client1: Amazon S3 API response. client1->server: metadata of the email. Note over server: Server stores \nthe metadata \nof the mail. server-->client1: Success Note over client1: Sent successfully. ``` **Failure scenario** **a. No user logged in.** ```sequence client->server: command \nmail-to client2 Note over server: client doesn't log in. server-->client: Error response. Note over client: Please login first. ``` **b. client doesn't exist.** ```sequence client1->server: command \nmail-to client2 Note over server: client2 doesn't exist. server-->client1: Error response. Note over client1: <username> does not exist. ``` --- ### 2. list-mail **Success scenario** ```sequence client1->server: command \nlist-mail Note over server: Server gets all \nmetadata of client1's \nincoming mails. server-->client1: metadata of \nincoming mails. Note over client1: Print mail#, Subject, \nFrom of \nincoming mails. ``` **Failure scenario** **a. No user logged in.** ```sequence client->server: command \nlist-mail Note over server: client doesn't log in. server-->client: Error response. Note over client: Please login first. ``` --- ### 3. retr-mail <mail#> **Success scenario** ```sequence client1->server: command \nretr-mail <mail#> Note over server: Query metadata \nof the mail server-->client1: metadata of \n the mail. client1->client1's bucket: Get mail object from \nclient1's bucket. client1's bucket->client1: Amazon S3 API response. Note over client1: Print the content \nof the mail. ``` **Failure scenario** **a. No user logged in.** ```sequence client->server: command \nretr-mail <mail#> Note over server: client doesn't log in. server-->client: Error response. Note over client: Please login first. ``` **b. Unknown <mail#>** ```sequence client1->server: command \nretr-mail <mail#> Note over server: <mail#> doesn't exist. server-->client1: Error response. Note over client1: No such mail. ``` --- ### 4. delete-mail <mail#> **Success scenario** ```sequence client1->server: command \ndelete-mail <mail#> Note over server: Query metadata \nof the mail server-->client1: metadata of the mail. client1->client1's bucket: Delete <mail#> object. client1's bucket->client1: Amazon S3 API response. Note over client1: Mail deleted. ``` **Failure scenario** **a. No user logged in.** ```sequence client->server: command \ndelete-mail <mail#> Note over server: client doesn't log in. server-->client: Error response. Note over client: Please login first. ``` **b. Unknown <mail#>** ```sequence client1->server: command \ndelete-mail <mail#> Note over server: <mail#> doesn't exist. server-->client1: Error response. Note over client1: No such mail. ```