Skip to content

Design and Planning

ttoru96 edited this page Nov 30, 2019 · 55 revisions

Document Revision History

  • Rev 1.3.2 2019-11-30 - Update component urls
  • Rev 1.3.1 2019-11-30 - Remove Social login feature
  • Rev 1.3 2019-11-24 - Add action and reducer for posting outfit image
  • Rev 1.2 2019-11-20 - Change Edit and Search functionalities
  • Rev 1.1 2019-11-15 - Update API specification
  • Rev 1.0 2019-10-19 - Initial submission

System Architecture

System Architecture

Description on how data request and response flows around ML API

Screen Shot 2019-11-02 at 5 57 25 PM

Design Details

Database Structure

E-R Diagram

ER-diagram Rectangles represent entity set and diamonds represent relationship set. Double lines represent total participation (eg. An outfit entity cannot exist unless it is related to a user entity, but not vice versa.). Numbers next to line indicate mapping cardinality and underlined attributes indicate primary key.

Model Relations

20191019_150155

Each rectangle is schema, consists of attributes for the model. Underlined attributes indicate primary key. Data type for each field is specified in the bracket. (M2M refers to ManyToMany, FK refers to Foreign Key). ‘user’ field for each model contains logged in user connected by foreign key relation. Bidirectional arrow means many to many relations.

Model column descriptions

Outfit: ‘items’ contains many to many relation table connecting Item and Outfit instance. ‘photo’ is a link to the image representing the outfit. ‘date’ is the date when the specific outfit record is created. ‘satisfaction’ is the int type index( 0-5 scale) representing the user’s satisfaction towards the specific outfit (default : null).

Item: 'outfits' contains many-to-many relation table connecting Item and Outfit instance. ‘tags’ contains many to many relation table connecting Item and Tag instance.

Tag : 'name' is the specific descriptor for each tag. (white, black, stripes etc.) ‘items’ contains many-to-many relation table connecting Tag and Item instance.

View

view Urls for each view

  1. Browse - /browse, /main(when logged in, default redirection)
  2. OutfitDetail - /outfitDetail/:id
  3. Calendar - /calendar
  4. Login - /login
  5. Signup - /signup
  6. LandingPage - /main (when not logged in, default redirection)
  7. CreateOutfit - /createOutfit

Component List

Components-Page-2 (1)

Component Structure

Components-Page-3 (Dotted lines refer to subcomponent relationships and Solid lines refer to Redirect/link relationships) (the Logout container is loaded on all containers except Main, Login and Signup)

Services

State

  • LoginReducer
    • isLoggedIn
    • loginErr
    • signupErr
  • OutfitReducer
    • outfits: Array of all outfits in database
    • selectedOutfit
      • imageUrl
      • satisfactionData
      • items
  • ItemReducer
    • items: all items in database
    • selectedOutfitItems: Array of items in selected outfit
    • selectedItem
  • TagReducer
    • tags: all tags in database
    • selectedTag
  • WeatherReducer
    • todayWeather
    • selectedDayWeather
  • ImageReducer
    • imageUrl
    • items: result of ML API run on outfit image

Actions

Reducer Action Function
Login logIn() send ID/Password, and receive result
logOut() Logout current user
signUp() Send input user info, check valid, and receive result
resetErr() Initialize error states for login and signup
Outfit getClassificationData(outfitImage) Get classified outfit data from ML API
getOutfits() Get all outfits user have
getSpecificOutfit(outfitId) Get specific outfit by outfit_id
createOutfit(image, classifiedData) Create new outfit data with image, containing items, etc
deleteOutfit() Delete specific outfit
editOutfit(outfitId) Edit content that specific outfit has
setOutfitSatisfaction(satisfaction, outfitId) Set satisfaction data to specific outfits
getOutfitByItem(item) Get all outfits that contains specific item
Item getItemByTags(tagCombination) Get all items that contains specific tag combination
editItem(itemId) Edit tags of specific item
addNewItem(tagCombination) Add custom item info to outfit
deleteItem() Delete all connection with tags that item has
createTag(tag) Create new tag of item
Tag editTag(tagId) Edit tag of item
deleteTag() Delete tag that has no connection with any item
Weather getWeather() Get Weather information of that day
getSpecificWeather(timeStamp) Get Weather information of day specified by timestamp
Image postImage(image) Send outfit image to backend

API

Model API GET POST PUT DELETE
User user/login X Log in user X X
user/logout Log out user X X X
user/ Get Logged-in state Create new user X X
Outfit /outfit Load all outfits of the current user Create new outfit X X
/outfit/:outfit_id Get detail of selected outfit X Edit selected outfit information Delete selected outfit
/outfit/:outfit_id/item Get item list of selected outfit Create new item for selected outfit X X
/outfit/:outfit_id/:item_id X X Edit selected item in relation to the selected outfit Delete selected item from selected outfit
Item /item/:item_id Get detail of selected item X Edit selected item information Delete selected Item
/item/:item_id/outfit Get outfits that contain the selected item X X X
/item/:item_id/tag Get tag list of selected item Create new tag for selected item X X
/item/:item_id/:tag_id X X Edit selected tag in relation to the selected item Delete selected tag from selected item
Tag /tag/:tag_id Get detail of selected tag X Edit selected tag Delete selected tag
/tag/:tag_id/item Get items that contain the selected tag X X X
Weather /weather Get weather info of current day X X X
/weather/:timeStamp Get weather info of selected day X X X
Image /image X Send outfit image to backend and run ML X X

Planning

Implementation Plan

Page Tasks Priority Time(days) Sprint Assignees Finished
Log in Log in user Low 1 3 김해수 O
Log out Log out user Low 1 3 김해수 O
Sign in Create new user Low 1 5 김해수 O
Redirection login on error Low 1 5 김해수 O
Browse Load outfits from database Mid 1 3 주성연 O
Route to other components Low 1 3 주성연 O
Recommendation Get weather info from API Mid 1 4 김해수 O
Get outfits that match weather profile Mid 2 4 김해수 O
Upload Photo upload from filesystem High 1 3 정소영 O
Make API call for component classification High 2 3 정소영 O
Map DeepFashion classes to our classification system Mid 1 3 정소영 O
Outfit tagging interface High 4 3 주성연 O
Upload item to database Mid 2 3 주성연 O
Log satisfaction data Low 2 3 주성연 O
Calendar Component interface design Low 3 4 정소영 O
Route to detail component Low 1 4 정소영 X
Search Component interface design Low 4 3,5 김해수 O
Autocomplete search query High 4 4 곽태원, 정소영 X
Search item by tag/outfit by item Very High 3 5 곽태원 O
Filter Search results by weather and satisfaction values Very High 3 5 김해수, 곽태원 X
Outfit detail Load information from database Mid 1 4 주성연 O
Component interface design Low 4 4 주성연 O
Outfit edit Edit mode interface (same with tagging interface) Low 1 5 주성연 O
Edit item/tag only for current outfit Mid 3 5 주성연 O

Testing Plan

Unit Testing

Front-end (React) unit testing will be conducted through Jest and Enzyme. Back-end (Django) will be tested with the default python unit test module. We aim for code coverage to be >80% in all occasions.

Functional Testing

API functionalities will be tested through the same frameworks (Jest, Enzyme, Python Unit Test), also utilizing mock data to emulate database behavior

Integration Testing

We will use Travis CI for integration testing.

Deployment

We will use Microsoft Azure for deployment.