Skip to content
This repository was archived by the owner on Dec 22, 2023. It is now read-only.
Luís Duarte edited this page Dec 22, 2023 · 1 revision

EAP

EAP: Architecture Specification and Prototype

Revogue empowers users to breathe new life into their wardrobe treasures, while cultivating a community where fashion is sustainable. It's about reimagining the lifecycle of fashion, where your garments become the catalyst for incredible second-hand discoveries.

A7: Web Resources Specification

Brief presentation of the artifact's goals.

1. Overview

M01: Authentication and User Profile Web Resources associated with user authentication and individual profile management. Includes the following system features: login/logout, registration, credential recovery, viewing and editing personal information and payment option management.
M02: Shop Web Resources related to the overall operation of the shop. They encompass the following system functionalities: product search and filter, product listing, the ability to view and edit product details, and the option to add and delete products. Users can sell and buy products simultaneously, with the option to add items to their wishlist. When an item is purchased, it's added to the cart.
M03: Messages and Reviews The web resources associated with the interaction between a buyer and a seller (messages) and the submission of reviews by buyers. This involves discussing product details, offering potential discounts, and assessing both the buyer's experience and the purchased item(s).
M04: Order and Checkout Web resources associated with orders and the checkout process. They encompass the following system functionalities: adding an order, viewing purchase history, tracking an order, cancelling an order, adding shipping and payment details, and receiving notifications when the order status changes.
M05: Reports and Tickets Web resources associated with reports and tickets. Includes the following system features: add report, view report, add ticket, view ticket and delete ticket.
M06: User Administration/Static Pages Web resources associated with user administration and platform moderation. Includes the following system features: view reports, ban/unban users, delete orders, delete user accounts, view and change user information, and view system access details for each user. Web resources including static content that are associated with this module: Dashboard, FAQ, About Us, Services and Contacts.

2. Permissions

PUB Public Users without privileges
USR User Authenticated users
OWN Owner Users that are owners of information
ADM Administrator System administrators

3. OpenAPI Specification

OpenAPI specification in YAML format to describe the vertical prototype's web resources.

open_api_yaml

openapi: '3.0.2'
info:
  title: ReVogue
  version: '1.0'
tags:
  - name: M01
  - name: M02
  - name: M03
  - name: M04
  - name: M05
  - name: M06
servers:
  - url: https://localhost
components:
  securitySchemes:
    cookieAuth:
      type: apiKey
      in: cookie
      name: laravel_session
paths:
  /:
    get:
      tags:
        - M02
      operationId: R201
      summary: Landing page of ReVogue
      description: Returns HTML, contains a overview of the website from trending products and categories and redirects people to the website features. PUB
      responses:
        '200':
          description: Returns the Landing Page
  /login:
    get:
      tags:
        - M01
      operationId: R101
      summary: Login Page
      description: Retuns HTML, contains the layout and the forms that the user should use to login. Should also contain buttons to OAuth login providers. PUB
      responses:
        '200':
          description: Returns the Login Page
    post:
      tags:
        - M01
      operationId: R102
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                email:
                  type: string
                password:
                  type: string
              required:
                - email
                - password
      summary: Login Action
      description: The Login Action, submitted by the form in the page PUB
      responses:
        '200':
          description: When the login is successful, redirect to the landing page or to the last page the user has been to.
        '403':
          description: When the login is not successful return the login page but with an error
# TODO: make oauth login
# /login/callback:
#   parameters:
#     - 
  /search:
    get:
      tags:
        - M02
      operationId: R202
      parameters:
        - in: query
          name: q
          schema:
            type: string
          description: Query string, when not supplied returns an empty search page
        - in: query
          name: pages
          schema:
            type: integer
          description: Page index
      summary: Search products
      description: PUB
      responses:
        '200':
          description: Returns the HTML for the search page
  /products/{id}:
    get:
      summary: Product page
      tags:
        - M02
      operationId: R203
      description: PUB
      parameters:
        - in: path
          name: id
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Returns the page of the product
        '404':
          description: Return default 404 page if slug is not found
  /register:
    get:
      tags:
        - M01
      operationId: R103
      summary: Register page 
      description: Returns the register page if the user is not logged on, redirect to the landing page otherwise. PUB
      responses:
        '200':
          description: Returns the register Page
    post:
      tags:
        - M01
      operationId: R104
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                email:
                  type: string
                password:
                  type: string
                username:
                  type: string
                displayName:
                  type: string
              required:
                - email
                - password
                - username
                - displayName
      summary: Register Action
      description: PUB
      responses:
        '200':
          description: If sucessful redirect to the profile settings page
        '400':
          description: Returns the register page with an error if something is wrong with the user submission
  /login/reset-password:
    get:
      summary: Reset Password page
      description: PUB
      tags:
        - M01
      operationId: R105
      responses:
        '200':
          description: Returns the Reset Password
    post:
      summary: Reset Password action
      description: PUB
      tags:
        - M01
      operationId: R106
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                email:
                  type: string
      responses:
        '200':
          description: Always returns 200, and shows a sucessful reset page for security purposes even if the email doesn't exist      
  /login/email-confirmation:
    get:
      summary: Email Confirmation page
      description: OWN
      tags:
        - M01
      operationId: R107
      responses:
        '200':
          description: Returns the email confirmation page
    post:
      summary: Resend Email Action
      description: OWN
      tags:
        - M01
      operationId: R108
      responses:
        '200':
          description: Resends the confirmation email and returns the same page
  /login/email-confirmation/verify/{id}/{hash}:
    get:
      summary: Email confirmation verification
      description: OWN
      tags:
        - M01
      operationId: R109
      parameters:
        - in: path
          name: id
          schema: 
            type: string
          required: true
        - in: path
          name: hash
          schema: 
            type: string
          required: true
      responses:
        '200': 
          description: If the verification is valid, validate the email and redirect to the home page.  
  /admin:
    get:
      
      summary: Admin landing pages
      description: ADM
      tags:
          - M06
      operationId: R601
      responses:
        '200':
          description: Returns the admin page
  /admin/orders:
    get:
      summary: Admin order managment page
      description: ADM
      tags:
        - M06
      operationId: R602
      responses:
        '200':
          description: Returns the admin orders page

  /admin/users:
    get:
      summary: Admin user managment page
      description: ADM
      tags:
          - M06
      operationId: R603
      responses:
        '200':
          description: Returns the admin users page
  /admin/users/delete:
    post:
      summary: Delete user action
      description: ADM
      tags:
          - M06
      operationId: R604
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                id:
                  type: string
              required:
                - id
      responses:
        '200':
          description: Returns the admin users page
  /admin/users/block:
    post:
      summary: Ban user action
      description: ADM
      tags:
          - M06
      operationId: R605
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                id:
                  type: string
              required:
                - id
      responses:
        '200':
          description: Returns the admin users page
  /admin/payouts:
    get:
      summary: Admin Payout managment page 
      description: ADM
      tags:
        - M06
      operationId: R606
      responses:
        '200':
          description: Returns the admin users payouts page
  /api/attributes:
    get:
      parameters:
        - in: query
          name: q
          schema:
            type: string
          required: false
      tags:
        - M02
      operationId: R204
      summary: Get all attributes or attribute
      description: PUB
      responses:
        '200':
          description: Returns all attributes
  /api/cart:
    delete:
      tags:
        - M04
      operationId: R401
      summary: Delete cart product
      description: OWN
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                product:
                  type: integer
              required:
                - product
      responses:
        '200':
          description: Deletes from cart
    post:
      tags:
        - M04
      operationId: R405
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                product:
                  type: integer
              required:
                - product
      summary: Add a product to the cart
      description: OWN
      responses:
        '200':
          description: Returns the cart
  /api/wishlist:
    post:
      tags:
        - M02
      operationId: R205
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                product:
                  type: integer
              required:
                - product
      summary: Add a product to the wishlist
      description: OWN
      responses:
        '200':
          description: Returns the wishlist
    delete:

      tags:
        - M02
      operationId: R206
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                product:
                  type: integer
              required:
                - product
      summary: Remove a product from the wishlist
      description: OWN
      responses:
        '200':
          description: Returns the wishlist
  /api/search:
    get:
      tags:
        - M02
      operationId: R207
      parameters:
        - in: query
          name: q
          schema:
            type: string
          description: Query string, when not supplied returns an empty search page
        - in: query
          name: limit
          schema:
            type: integer
          description: Limit of items to get, not required because the application sets a default
        - in: query
          name: after
          schema:
            type: integer
          description: Starts the query from a certain index defaults to 0
      summary: Search products
      description: PUB
      responses:
        '200':
          description: Returns the HTML for the search page
  /logout:
    get:
      tags:
        - M01
      operationId: R110
      summary: Logout Action
      description: Logs out the user and redirects to the landing page USR
      responses:
        '200':
          description: Returns the landing page
  /products/new:
    get:
      tags:
        - M02
      operationId: R208
      summary: New Products Page
      description: Returns the new products page. USR
      responses:
        '200':
          description: Returns the new products page
    post:
      tags:
        - M02 
      operationId: R209
      summary: New Products Action
      description: Adds a new product to the database. USR
      responses:
        '200':
          description: Returns the new products page
  /products:
    get:
      tags:
        - M02
      operationId: R210
      summary: Products List Page
      description: Returns the products page. PUB
      responses:
        '200':
          description: Returns the products page
  /profile/complete:
    get:
      tags:
        - M01
      operationId: R111
      summary: Complete Profile Page
      description: Returns the complete profile page. OWN
      responses:
        '200':
          description: Returns the complete profile page
    post:  
      tags:
        - M01
      operationId: R112
      summary: Complete Profile Action
      description: Completes the profile of the user. OWN
      responses:
        '200':
          description: Returns the complete profile page
  /profile/{id}:
    get:
      parameters:
        - in: path
          name: id
          schema:
            type: string
          required: true
      tags:
        - M01
      operationId: R113
      summary: Profile Page
      description: Returns the profile page with selling products. USR
      responses:
        '200':
          description: Returns the profile page
  /profile/{id}/sold:
    get:
      parameters:
        - in: path
          name: id
          schema:
            type: string
          required: true
      tags:
        - M01
      operationId: R114
      summary: Profile Sold Page
      description: Returns the profile sold page. USR
      responses:
        '200':
          description: Returns the profile sold page
  /profile/{id}/likes:
    get:
      parameters:
        - in: path
          name: id
          schema:
            type: string
          required: true
      tags:
        - M01
      operationId: R115
      summary: Profile Likes Page
      description: Returns the profile likes page. USR
      responses:
        '200':
          description: Returns the profile likes page
  /profile/{id}/history:
    get:
      parameters:
        - in: path
          name: id
          schema:
            type: string
          required: true
      tags:
        - M01
      operationId: R116
      summary: Profile History Page
      description: Returns the profile history page. OWN
      responses:
        '200':
          description: Returns the profile history page
  /cart:
    get:
      tags:
        - M04
      operationId: R402
      summary: Cart Page
      description: Returns the cart page. OWN
      responses:
        '200':
          description: Returns the cart page
  /checkout:
    get:
      tags:
        - M04
      operationId: R403
      summary: Checkout Page
      description: Returns the checkout page. OWN
      responses:
        '200':
          description: Returns the checkout page
    post:
      tags:
        - M04
      operationId: R404
      summary: Checkout Action
      description: Completes the checkout. OWN
      responses:
        '200':
          description: Complete the buy and redirect to the home page
  /products/{id}/delete:
    parameters:
      - in: path
        name: id
        schema:
          type: integer
        required: true
    post:
      tags:
        - M02
      operationId: R211
      summary: Delete Product action
      description: Deletes product if it's own product and not sold. own
      responses:
        '200':
          description: Delete the product and redirect to the home page
  /products/{id}/edit:
    parameters:
      - in: path
        name: id
        schema:
          type: integer
        required: true
    get:
      tags:
        - M02
      operationId: R212
      summary: Edit product page
      responses:
        '200':
          description: Returns edit product page
    post:
      tags:
        - M02
      operationId: R213
      summary: Edit Product action
      description: Edit product if it's own product and not sold. own
      responses:
        '200':
          description: Edit the product and redirect to the product page

A8: Vertical prototype

This sections describes the features implemented for the prototype of the product, including a list of the user stories that are addressed and the web resources developed

1. Implemented Features

1.1. Implemented User Stories

Identify the user stories that were implemented in the prototype.

Identifier Name Priority Description
US101 See Landing Page High As a User, I want to see a page that shows me a bit of the way the website works and that is easy to sign up/in
US102 See Product Page High As a User, I want to access the product information, so I can better understand if the product fits my requirements.
US103 See Product Details High As a User, I want to access the product details, so I have more information to make a decision that fits my requirements
US104 Browse Products High As a User, I want to be able to browse the website so I can find the products I am looking for.
US105 Search Products using Full-Text Search High As a User, I want to be able to search products whose names match the text I insert
US201 Sign-up High As a Visitor, I want to register on the website, so that I can authenticate myself into the system and become an authenticated user
US202 Sign-in High As a Visitor, I want to authenticate myself into the system, so that I can use all the features that are only available to authenticated users
US301 Add item to shopping cart High As an Authenticated User, I want to add an item to the shopping cart, so that I can buy many things at once
US303 Sell products High As an Authenticated User, I want to sell products, so that I can give them a new life
US305 Add item to Wishlist High As an Authenticated User, I want to be able to add items to a wishlist, so that I can track my favorite items easily
US306 Manage Items from Wishlist High As an Authenticated User, I want to be able to manage my wishlist, so that I can remove/reorder my favorite items
US310 Change Profile Details High As an Authenticated User, I want to be able to alter my profile, so that people can know more about me and be more easily recognized on the platform
US324 Purchase History High As an Authenticated Used, I want to be able to see my purchase history, so that I can see the status of my orders
US325 Logout High As an Authenticated User, I want to be able to log out of my account so that I can securely end my session and protect my account
US326 Checkout with payment on delivery High As an Authenticated User, I want to be able to checkout with the option of payment on delivery, so that I can pay for my order when it arrives.
US404 Manage Order Status High As an Administrator, I want to be able to manage order statuses, so that I can keep track of the progress of customer orders and ensure timely delivery and customer satisfaction
US405 Manage Users High As an Administrator, I want to be able to manage users, so that I can keep a friendly environment on the platform and be able to see payout details and amounts

1.2. Implemented Web Resources

Identify the web resources that were implemented in the prototype.

Module M01: Authentication and User Profile

Web Resource Reference URL
R101: Login Page GET /login
R102: Login Action POST /login
R103: Register Page GET /register
R104: Register Action POST /register
R107: Email Confirmation Page GET /login/email-confirmation
R108: Resend Email Action POST /login/email-confirmation
R110: Logout Action GET /logout
R111: Complete Profile Page GET /profile/complete
R112: Complete Profile Action POST /profile/complete
R113: Profile Page GET /profile/{id}
R114: Profile Sold Page GET /profile/{id}/sold
R115: Profile Likes Page GET /profile/{id}/likes
R116: Profile History Page GET /profile/{id}/history

Module M02: Shop

Web Resource Reference URL
R201: Landing Page GET /
R202: Search Products /search
R203: Product Page GET /products/{id}
R204: Get all attributes GET /api/attributes
R205: Add a product to the wishlist POST /api/wishlist
R206: Remove a product from the wishlist DELETE /api/wishlist
R207: Search Products GET /api/search
R208: New Products Page GET /products/new
R209: New Products Action POST /products/new
R210: Products List Page GET /products
R211: Product Delete Action POST /products/{id}/delete
R212: Product Edit page GET /products/{id}/edit
R213: Product Edit action POST /products/{id}/edit

Module M04: Order and Checkout

Web Resource Reference URL
R401: Delete cart product DELETE /api/cart
R405: Add a product to the cart POST /api/cart
R402: Cart Page GET /cart
R403: Checkout Page GET /checkout
R404: Checkout Action POST /checkout

Module M06: User Administration/Static Pages

Web Resource Reference URL
R601: Admin Landing Pages GET /admin
R602: Admin order management page GET /admin/orders
R603: Admin user management page GET /admin/users
R604: Delete user action POST /admin/users/delete
R605: Ban user action POST /admin/users/block
R606: Admin Payout Management Page GET /admin/payouts

2. Prototype

URL of the prototype plus user credentials necessary to test all features.

Prototype Source Code

ReVogue website

email password role
joseph.waldor@revogue.com alface-torrada-149 admin
chloehall@example.com cenoura-cozida-321 user

Revision history

Changes made to the first submission:

  • Added a direct link to the open api file and rephrased the reviews portion of the web resources

GROUP23107, 22/11/2023