Giter VIP home page Giter VIP logo

productconfigurator's People

Contributors

dominik-pm avatar sleutgeb avatar t-scherzer avatar

Stargazers

 avatar

Watchers

 avatar  avatar

productconfigurator's Issues

Images API /images

Interface (/images):

/images

to get the names of all images in the images folder

Request Data:

{
    
}

Response Data:

[
    String
]

Todo:

  • implement an api that return every image name

Test cases:

  • test response data

Backend API /products

Interfaces:

/products

to get all products

Request Data:

{
    
}

Response Data:

[
    "configId": Number,
    "name": String,
    "description": String,
    "images": [String]
]

Todo:

  • implement a service that returns all products

Test cases:

  • test response data

Product order PDF

Product order PDF

the configuration of an ordered product is sent by mail in a pdf format

Expected Behavior

whenever a user orders a product (with a valid configuration), an email with a pdf that includes the order details (configuration) is sent

Todo:

  • implement a pdf generator
  • implement a mail service

Test cases:

  • test if an email is sent when a user orders a product
  • test if the pdf shows the correct data

Backend API /configuration

Interfaces:

/configuration/[id]

to get the configuration options of a specific product (id)

Request Data:

{
    
}

Response Data:

{
    "configId": String,
    "name": String,
    "description": String,
    "images": [String],
    "options": [
        {
            "id": Number,
            "name": String,
            "description": String,
            "productNumber": String
        }
    ],
    "optionGroups": [
        {
            "id": String,
            "name": String,
            "description": String,
            "optionIds": [Number],
            "required": Boolean
        }
    ],
    "optionSections": [
        {
            "id": String,
            "name": String,
            "optionGroupIds": [Number]
        },
    ],
    "rules": [
        "basePrice": Number,
        "defaultModel": "{MODEL_NAME}",
        "models:" [
            {
                "id": String
                "name": String,
                "description": String
                "optionIds": ["{OPTION_ID}"]
            }
        ],
        "replacementGroups": {
            "{GROUP_ID}": ["{OPTION_ID}"]
        },
        "groupRequirements": {
            "{GROUP_ID}": [{"GROUP_ID"}]
        },
        "requirements": {
            "{OPTION_ID}": ["{OPTION_ID}"]
        },
        "incompatibilities": {
            "{OPTION_ID}": ["{OPTION_ID}"]
        },
        "priceList": {
            "{OPTION_ID}": Number
        }
    ]
}

Todo:

  • get the products configuration information from the database api
  • format the data in the correct way and send it as a response

Test cases:

  • test response data

/configuration (POST)

to save a new configuration with its configuration options for a new product

Request Data:

{
    "configId": String,
    "images": [String],
    "options": [
        {
            "id": String,
            "productNumber": String
        }
    ],
    "optionGroups": [
        {
            "id": String
            "optionIds": [String],
            "required": Boolean,
            "replacement": Boolean
        }
    ],
    "optionSections": [
        {
            "id": String,
            "optionGroupIds": [String]
        }
    ],
    "rules": {
        "basePrice": Number,
        "defaultModel": "{MODEL_NAME}",
        "models:": [
            {
                "id": String
                "optionIds": ["{OPTION_ID}"]
            }
        ],
        "requirements": {
            "{OPTION_ID}": ["{OPTION_ID}"]
        },
        "incompatibilities": {
            "{OPTION_ID}": ["{OPTION_ID}"]
        },
        "priceList": {
            "{OPTION_ID}": Number
        },
    },
    "languages": {
        "{LANGUAGE_NAME}": {
            "name": String,
            "description": String,
            "options": [
                {
                    "id": String,
                    "name": String,
                    "description": String,
                }
            ],
            "optionSections": [
                {
                    "id": String,
                    "name": String
                }
            ],
            "optionGroups": [
                {
                    "id": String,
                    "name": String,
                    "description": String
                }
            ],
            "models": [
                "id": String
                "name": String,
                "description": String
            ]
        }
    }
}

Response Data:

{

}

Todo:

  • destruct the json object into the format that the database api wants it
  • send the data to the database api

Test cases:

  • check if the json is correctly read and reformatted

Multiple Languages

Multiple Languages

the application is available in multiple languages (english, german, french)

Expected Behavior

on the frontend you can choose between a language

every menu text and product information is now in the selected language

Todo:

  • multiple languages for the product information can be saved into the database (the query now has to include which language you want) @SLeutgeb

Test cases:

  • see if the frontend correctly switches between languages

Database-Backend /db/account/configurations/

Interfaces:

/db/account/configurations (GET)

to get all saved configurations

Request Data:

{
    
}

Response Data:

[
    {
        "configId": Number,
        "savedName": String,
        "user": {
            "userName": String,
            "userEmail": String
        },
        "date": Date,
        "name": String,
        "description": String,
        "options": [String]
    }
]

Todo:

  • send all saved configurations

Test cases:

  • saved configurations are sent successfully

/db/account/configurations/ (POST)

to save a configuration to the account for further configuration later on
Request Data:

{
        "configId": Number,
        "savedName": String,
        "user": {
            "userName": String,
            "userEmail": String
        },
        "date": Date,
        "name": String,
        "description": String,
        "options": [String]
}

Response Data:

{

}

Todo:

  • save the configuration

Test cases:

  • reload the saved configuration and check for errors

/db/account/configurations/{configId}/{savedName} (DELETE)

to delete a saved configuration
Request Data:

{
       
}

Response Data:

{

}

Todo:

  • delete the configuration

Test cases:

  • check if configuration is deleted

Database-Backend /db/configuration

Interfaces:

/db/configuration/ (GET)

to get all configurations

Request Data:

{
    
}

Response Data:

[
    {
        "configId": Number,
        "name": String,
        "description": String,
        "images": [String],
        "options": [
            {
                "id": Number,
                "name": String,
                "description": String
            }
        ],
        "optionGroups": [
            {
                "id": String,
                "name": String,
                "description": String,
                "optionIds": [Number],
                "required": Boolean
            }
        ],
        "rules": [
            "basePrice": Number,
            "replacementGroups": {
                "{GROUP_ID}": ["{OPTION_ID}"]
            },
            "groupRequirements": {
                "{GROUP_ID}": [{"GROUP_ID"}]
            },
            "requirements": {
                "{OPTION_ID}": ["{OPTION_ID}"]
            },
            "incompatibilities: {
                "{OPTION_ID}": ["{OPTION_ID}"]
            },
            "priceList": {
                "{OPTION_ID}": Number
            }
        ]
    }
]

Todo:

  • format the data in the correct way and send it as a response

Test cases:

  • test response data

/db/configuration (POST)

to save a new configuration with its configuration options for a new product

Request Data:

{
    "name": String,
    "description": String,
    "images": [String],
    "options": [
        {
            "id": Number,
            "name": String,
            "description": String
        }
    ],
    "optionSections": [
        {
            "id": String,
            "name": String,
            "optionGroupIds": [
                "{OPTION_GROUP_ID}", "{OPTION_GROUP_ID}"
            ]
        }
    ],
    "optionGroups": [
        {
            "id": String,
            "name": String,
            "description": String,
            "optionIds": [Number],
            "required": Boolean,
            "replacement": Boolean
        }
    ],
    "rules": {
        "basePrice": Number,
        "defaultModel": "{MODEL_NAME}",
        "models:": [
            {
                "model": String,
                "options": ["{OPTION_ID}"]
            }
        ],
        "requirements": {
            "{OPTION_ID}": ["{OPTION_ID}"]
        },
        "incompatibilities": {
            "{OPTION_ID}": ["{OPTION_ID}"]
        },
        "priceList": {
            "{OPTION_ID}": Number
        }
    }
}

Response Data:

{

}

Todo:

  • destruct the json object format for the database
  • check for a correct response after reloading it

Test cases:

  • check if the json is correctly read and saved

db/configuration

Interfaces:

/configuration/byWrapper (GET)

to get a specific configuration

Request Data:

{
    "configId": String,
    "savedName": String,
    "userEmail": String
}

Response Data:

{
    "savedName": String,
    "options": [
        String
    ],
    "configId": String,
    "name": String,
    "description": String,
    "status": String,
    "date": DateTime,
    "user": {
        "userName": String,
        "userEmail": String,
        "isAdmin": Boolean
    }
}

Todo:

  • implement a database query that gets the required products configuration options

Test cases:

  • test response data

/configuration/ (GET)

to get all configurations

Request Data:

{
    
}

Response Data:

[
    {
        "savedName": String,
        "options": [
        String
        ],
        "configId": String,
        "name": String,
        "description": String,
        "status": String,
        "date": DateTime,
        "user": {
            "userName": String,
            "userEmail": String,
            "isAdmin": Boolean
        }
    }
]

Todo:

  • implement a database query that gets all configurations

Test cases:

  • test response data

/configuration (POST)

to insert a new configuration

Request Data:

{
    "savedName": String,
    "options": [
      String
    ],
    "configId": String,
    "name": String,
    "description": String,
    "status": String,
    "date": DateTime,
    "user": {
        "userName": String,
        "userEmail": String,
        "isAdmin": Boolean
    }
}

Response Data:

{

}

Todo:

  • implement a database query that post the configuration

Test cases:

  • test if the configuration is saved
  • validate the post format

/db/configuration (DELETE)

to delete a configuration

Request Data:

{
    "configId": String,
    "savedName": String,
    "userEmail": String
}

Response Data:

{

}

Todo:

  • implement a database query to delete the configuration

Test cases:

  • test if the configuration is deleted

/configuration/[savedName] (PUT)

to update the configuration

Request Data:

{
    "savedName": String,
    "options": [
      String
    ],
    "configId": String,
    "name": String,
    "description": String,
    "status": String,
    "date": DateTime,
    "user": {
        "userName": String,
        "userEmail": String,
        "isAdmin": Boolean
    }
}

Response Data:

{

}

Todo:

  • implement a database query to update the configuration

Test cases:

  • test if the configuration is updated

Database-Backend /db/products

Interfaces:

/db/products/ (POST)

to save a configured product

Request Data:

{
    "configurationName": String,
    "options": [String],
    "price": Number
}

Response Data:

Todo:

  • save the product

Test cases:

  • check if the reloaded product equals the sent one

Backend API /account

Interfaces:

/account/configurations/[id] (POST)

to save a configuration to the account for further configuration later on
Request Data:

{
    "savedName": String,
    "options": [String]
}

Response Data:

{

}

Todo:

  • send the configuration to save to the database api

Test cases:

  • the saved configuration can be seen in the account page on the frontend

/account/configurations/[id] (DELETE)

to delete a saved configurations from the user

Request Data:

{
    "savedName": String
}

Response Data:

{

}

Todo:

Test cases:

  • the removed configuration is no longer in the saved configuration list

/account/configurations (GET)

to get all configurations of the user (including saved and ordered configurations )

Request Data:

{
    
}

Response Data:

[
    {
        "savedName": String,
        "date": Date,
        "configId": Number,
        "status": "saved" | "ordered",
        "name": Stromg
        "description": String,
        "options": [String]
    }
]

Todo:

  • get all the users configurations from the database api
  • format the data in the correct way and send it as a response

Test cases:

  • configurations can be seen in the account page on the frontend

/account/allorderedconfigurations (GET)

to get all configurations of every user (has to be an admin to call that)

Request Data:

{
    
}

Response Data:

[

    {
        "savedName": String,
        "user": {
            "userName": String,
            "userEmail": String
        },
        "date": Date,
        "status": "saved" | "ordered",
        "configId": Number,
        "name": String,
        "description": String,
        "options": [String]
    }
]

Todo:

  • get all the ordered configurations from the database api
  • format the data in the correct way and send it as a response

Test cases:

  • ordered configurations can be seen in the account page on the frontend (when logged in as an admin)

Product Importer Basic

Product Importer Basic

to read a CSV-file with a products configuration options and send that data to the backend

Expected Behavior

a small program (windows forms) that can import a CSV-file is shown

when imported, the program can send a request to the backend

Todo:

  • think of a format to save the configuration options for a product into a CSV-file
  • write a small program, that reads the CSV-file
  • send the read data to the backend (/products)

Test cases:

  • test error handling when requesting the data
    • when no connection to the backend can be established (timeout)
    • when the wrong data is sent or is in the wrong format
  • the CSV-File is read correctly
  • test error handling when there is something wrong with the CSV data
  • test if the data is really sent to the backend

Frontend Product listings

Frontend Product listings

list all products on the front page of the website

Expected Behavior

on the front page of the web-interface, there should be a listing of all available products

only the name, description (TODO: and models/preconfigs) and an image is shown

if the user clicks on a product, the detailed page of the product is shown (with all the configuration options)

Todo:

  • implement an http-request that gets all the products

Test cases:

  • test error handling when requesting the data
    • when no connection to the backend can be established (timeout)
    • when the wrong data is sent or is in the wrong format
  • multiple products can be displayed

Frontend Product Configuration

Frontend Product Configuration

to configure a certain product

Expected Behavior

when clicking on a product, a page with all the configuration possibilities should shown

the user can configure the product based on the configuration rules of the product

when the user finishes configuring, he can send the configuration to the backend

Todo:

  • implement an http-request that gets the configuration for the clicked on product (with an ID)
  • display the configuration options in their option group
  • implement the logic for dependent options
  • implement the logic for dependent groups
  • implement an http-request (POST) that sends the configuration to the backend

Test cases:

  • test error handling when requesting the configuration data
    • when no connection to the backend can be established (timeout)
    • when the wrong data is sent or is in the wrong format
  • a products configuration page can be shown
  • test error handling when sending the configuration
    • when no connection to the backend can be established (timeout)
    • when the wrong data is sent or is in the wrong format

db/product

Interfaces:

/db/product/ (GET)

to get all products

Request Data:

{
    
}

Response Data:

[
    {
        "configId": String,
        "images": [
        String
        ],
        "name": String,
        "description": String,
        "options": [
            {
                "id": String,
                "name": String,
                "description": String
            }
        ],
        "rules": {
            "basePrice": Number,
            "defaultModel": String,
            "requirements": {
                "additionalProp1": [
            String
                ],
                "additionalProp2": [
            String
                ],
                "additionalProp3": [
            String
                ]
            },
            "incompatibilities": {
                "additionalProp1": [
            String
                ],
                "additionalProp2": [
            String
                ],
                "additionalProp3": [
            String
                ]
            },
            "groupRequirements": {
                "additionalProp1": [
            String
                ],
                "additionalProp2": [
            String
                ],
                "additionalProp3": [
            String
                ]
            },
            "priceList": {
                "additionalProp1": Number,
                "additionalProp2": Number,
                "additionalProp3": Number
            },
            "models": [
                {
                    "id": String,
                    "optionIds": [
              String
                    ],
                    "name": String,
                    "description": String
                }
            ],
            "replacementGroups": {
                "additionalProp1": [
            String
                ],
                "additionalProp2": [
            String
                ],
                "additionalProp3": [
            String
                ]
            }
        },
        "optionGroups": [
            {
                "id": String,
                "optionIds": [
            String
                ],
                "required": Boolean,
                "name": String,
                "description": String
            }
        ],
        "optionSections": [
            {
                "id": String,
                "name": String,
                "optionGroupIds": [
            String
                ]
            }
        ]
    }
]

Todo:

  • implement a database query that gets the products

Test cases:

  • test response data

/db/product/[id] (GET)

to get a specific product

Request Data:

{
    
}

Response Data:

{
    "configId": String,
    "images": [
        String
    ],
    "name": String,
    "description": String,
    "options": [
        {
            "id": String,
            "name": String,
            "description": String
        }
    ],
    "rules": {
        "basePrice": Number,
        "defaultModel": String,
        "requirements": {
            "additionalProp1": [
            String
            ],
            "additionalProp2": [
            String
            ],
            "additionalProp3": [
            String
            ]
        },
        "incompatibilities": {
            "additionalProp1": [
            String
            ],
            "additionalProp2": [
            String
            ],
            "additionalProp3": [
            String
            ]
        },
        "groupRequirements": {
            "additionalProp1": [
            String
            ],
            "additionalProp2": [
            String
            ],
            "additionalProp3": [
            String
            ]
        },
        "priceList": {
            "additionalProp1": Number,
            "additionalProp2": Number,
            "additionalProp3": Number
        },
        "models": [
            {
                "id": String,
                "optionIds": [
              String
                ],
                "name": String,
                "description": String
            }
        ],
        "replacementGroups": {
            "additionalProp1": [
            String
            ],
            "additionalProp2": [
            String
            ],
            "additionalProp3": [
            String
            ]
        }
    },
    "optionGroups": [
        {
            "id": String,
            "optionIds": [
            String
            ],
            "required": Boolean,
            "name": String,
            "description": String
        }
    ],
    "optionSections": [
        {
            "id": String,
            "name": String,
            "optionGroupIds": [
            String
            ]
        }
    ]
}

Todo:

  • implement a database query that get the product

Test cases:

  • test response data

/db/product (POST)

to add a new product to the database

Request Data:

{
    "configId": String,
    "images": [
      String
    ],
    "name": String,
    "description": String,
    "options": [
        {
            "id": String,
            "name": String,
            "description": String
        }
    ],
    "rules": {
        "basePrice": Number,
        "defaultModel": String,
        "requirements": {
            "additionalProp1": [
          String
            ],
            "additionalProp2": [
          String
            ],
            "additionalProp3": [
          String
            ]
        },
        "incompatibilities": {
            "additionalProp1": [
          String
            ],
            "additionalProp2": [
          String
            ],
            "additionalProp3": [
          String
            ]
        },
        "groupRequirements": {
            "additionalProp1": [
          String
            ],
            "additionalProp2": [
          String
            ],
            "additionalProp3": [
          String
            ]
        },
        "priceList": {
            "additionalProp1": Number,
            "additionalProp2": Number,
            "additionalProp3": Number
        },
        "models": [
            {
                "id": String,
                "optionIds": [
            String
                ],
                "name": String,
                "description": String
            }
        ],
        "replacementGroups": {
            "additionalProp1": [
          String
            ],
            "additionalProp2": [
          String
            ],
            "additionalProp3": [
          String
            ]
        }
    },
    "optionGroups": [
        {
            "id": String,
            "optionIds": [
          String
            ],
            "required": Boolean,
            "name": String,
            "description": String
        }
    ],
    "optionSections": [
        {
            "id": String,
            "name": String,
            "optionGroupIds": [
          String
            ]
        }
    ]
}

Response Data:

{

}

Todo:

  • save the new products configuration in the database

Test cases:

  • test request data format
  • test if the product is added to the database

/db/product/[id] (DELETE)

to delete a specific product

Request Data:

{
    
}

Response Data:

{

}

Todo:

  • implement a database query that deletes the product

Test cases:

  • test if deleted in database

/db/product/ (PUT)

to update a specific product

Request Data:

{
    "configId": String,
    "images": [
      String
    ],
    "name": String,
    "description": String,
    "options": [
        {
            "id": String,
            "name": String,
            "description": String
        }
    ],
    "rules": {
        "basePrice": Number,
        "defaultModel": String,
        "requirements": {
            "additionalProp1": [
          String
            ],
            "additionalProp2": [
          String
            ],
            "additionalProp3": [
          String
            ]
        },
        "incompatibilities": {
            "additionalProp1": [
          String
            ],
            "additionalProp2": [
          String
            ],
            "additionalProp3": [
          String
            ]
        },
        "groupRequirements": {
            "additionalProp1": [
          String
            ],
            "additionalProp2": [
          String
            ],
            "additionalProp3": [
          String
            ]
        },
        "priceList": {
            "additionalProp1": Number,
            "additionalProp2": Number,
            "additionalProp3": Number
        },
        "models": [
            {
                "id": String,
                "optionIds": [
            String
                ],
                "name": String,
                "description": String
            }
        ],
        "replacementGroups": {
            "additionalProp1": [
          String
            ],
            "additionalProp2": [
          String
            ],
            "additionalProp3": [
          String
            ]
        }
    },
    "optionGroups": [
        {
            "id": String,
            "optionIds": [
          String
            ],
            "required": Boolean,
            "name": String,
            "description": String
        }
    ],
    "optionSections": [
        {
            "id": String,
            "name": String,
            "optionGroupIds": [
          String
            ]
        }
    ]
}

Response Data:

{

}

Todo:

  • implement a database query that updates the product

Test cases:

  • test is updated

Frontend Show Ordered Products

Frontend Show Ordered Products

list configurated products that have already been ordered

Expected Behavior

on a separated page (only visible by admins) you can see all ordered products

if the user clicks on a product, the configuration page is shown but the configurations are locked in

the user can change the configuration of the product when clicking "edit configuration"

Todo:

  • implement an http-request that gets all the ordered/saved products

Test cases:

  • test error handling when requesting the data
    • when no connection to the backend can be established (timeout)
    • when the wrong data is sent or is in the wrong format
  • product orders are shown
  • locked configuration page is shown with the products configuration

db/booking

Interfaces (/booking):

/booking/[id]

to get the configuration options of a specific product (id)

Request Data:

{
    
}

Response Data:

{
    "id": Number,
    "customer": Number,
    "configId": Number,
    "config": {
        "id": Number,
            "customer": Number,
                "product": {
            "productNumber": String,
                "price": Number,
                    "category": String,
                        "infos": {
                "name": String,
                    "description": String
            }
        },
        "options": [
            {
                "configId": Number,
                "optionField": {
                    "id": Number,
                    "type": String,
                    "required": Boolean,
                    "infos": {
                        "name": String,
                        "description": String
                    }
                },
                "children": [
                    {
                        "configId": Number,
                        "optionField": {
                            "id": Number,
                            "type": String,
                            "required": Boolean,
                            "infos": {
                                "name": String,
                                "description": String
                            }
                        },
                        "children": [],
                        "selected": [
                            {
                                "productNumber": String,
                                "price": Number,
                                "category": String,
                                "infos": {
                                    "name": String,
                                    "description": String
                                }
                            }
                        ]
                    }
                ],
                "selected": []
            }
        ]
    }
}

Todo:

  • implement a database query that gets the required Booking information

Test cases:

  • test response data

/booking/getByCustomer/[customerId]

get Bookings from a specific customer

Request Data:

{

}

Response Data:

[
    {
        "id": Number,
        "customer": Number,
        "config": Number
    }
]

Todo:

  • implement a database query that gets the required Booking information from a customer

Test cases:

  • test response data

/booking (POST)

Post a new Booking

Request Data:

    {
    "id": Number,
     "customer": Number,
     "configId": Number,
      "config": {
        "id": Number,
            "productNumber": String,
                "customer": Number,
                    "configurationHasOptionFields": [
                        {
                            "configId": Number,
                            "optionFieldId": Number,
                            "optionField": {
                                "id": Number,
                                "type": String,
                                "required": Boolean,
                                "optionFieldHasLanguages": [
                                    {
                                        "optionFieldId": Number,
                                        "language": String,
                                        "name": String,
                                        "description": String
                                    }
                                ]
                            },
                            "Children": [
                                String
                            ],
                            "Selected": [
                                {
                                    "productNumber": String,
                                    "price": Number,
                                    "category": String,
                                    "buyable": Boolean,
                                    "pictures": [
                                        {
                                            "id": Number,
                                            "productNumber": String,
                                            "url": String
                                        }
                                    ],
                                    "productHasLanguages": [
                                        {
                                            "productNumber": String,
                                            "language": String,
                                            "name": String,
                                            "description": String
                                        }
                                    ],
                                    "productsHasOptionFields": [
                                        {
                                            "productNumber": String,
                                            "optionFields": Number,
                                            "dependencyType": String,
                                            "optionField": {
                                                "id": Number,
                                                "type": String,
                                                "required": Boolean,
                                                "optionFieldHasLanguages": [
                                                    {
                                                        "optionFieldId": Number,
                                                        "language": String,
                                                        "name": String,
                                                        "description": String
                                                    }
                                                ]
                                            },
                                            "product": String
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
    }
}

Response Data:

{

}

Todo:

  • implement a database query that saves the new Booking information

Test cases:

  • test if saved

db/language

Interfaces (/language):

db/language (GET)

to get the configuration options of a specific product (id)

Request Data:

{
    
}

Response Data:

[
    String
]

Todo:

  • implement a database query that gets the languages

Test cases:

  • test response data

Backend API /products (order a product)

Interfaces:

/products/[id] (POST)

to order the configured product

Request Data:

{
    "configurationName": String,
    "options": [String],
    "price": Number,
    "model": String
}

Response Data:

Todo:

  • destruct the json object into the format that the database api wants it
  • calculate the price of the product (compare it to the sent price -> for test purpose to check if the frontend calculated the price correctly)
  • send the data to the database api

Test cases:

  • check if the json is correctly read and reformatted

User Accounts

User accounts

users can register an account

Expected Behavior

when a user is registered and logged in, he can:

  • save configurations for later
  • view his saved/ordered configurations

Todo:

  • implement a database tables for user accounts @SLeutgeb
  • implement a user login on the frontend @dominik-pm
  • implement a user page on the frontend @dominik-pm
  • implement a login and register api interface in the backend @t-scherzer

Test cases:

  • a user can register an account and login
  • a user can see his ordered configurations in the user page
  • a user can save a configuration and see it in the user page
  • a user can logout
  • passwords are stored as a hash in the database

Product Importer Advanced

Product Importer Advanced

to create a new product including its configuration on the frontend

Expected Behavior

on the frontend there is a page (only accessible with permission TODO) where you can create a product

when the product is fully configured (options, details, images, ...) the user can send it to the backend

Todo:

  • implement a page where you can configure a product
    • basic information (title, description, image)
    • add new options
  • implement an http-request that sends the new product to the backend (/products)

Test cases:

  • test error handling when requesting the data
    • when no connection to the backend can be established (timeout)
    • when the wrong data is sent or is in the wrong format
  • a product with multiple options including dependencies of these options can be configured
  • the new product is shown on the main page and can also be configured

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.