dominik-pm / productconfigurator Goto Github PK
View Code? Open in Web Editor NEWA Product Configurator for different kinds of products.
A Product Configurator for different kinds of products.
to get the names of all images in the images folder
Request Data:
{
}
Response Data:
[
String
]
Todo:
Test cases:
to get all products
Request Data:
{
}
Response Data:
[
"configId": Number,
"name": String,
"description": String,
"images": [String]
]
Todo:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
to delete a saved configuration
Request Data:
{
}
Response Data:
{
}
Todo:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
to delete a configuration
Request Data:
{
"configId": String,
"savedName": String,
"userEmail": String
}
Response Data:
{
}
Todo:
Test cases:
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:
Test cases:
to save a configured product
Request Data:
{
"configurationName": String,
"options": [String],
"price": Number
}
Response Data:
Todo:
Test cases:
to save a configuration to the account for further configuration later on
Request Data:
{
"savedName": String,
"options": [String]
}
Response Data:
{
}
Todo:
Test cases:
to delete a saved configurations from the user
Request Data:
{
"savedName": String
}
Response Data:
{
}
Todo:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
to delete a specific product
Request Data:
{
}
Response Data:
{
}
Todo:
Test cases:
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:
Test cases:
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:
Test cases:
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:
Test cases:
get Bookings from a specific customer
Request Data:
{
}
Response Data:
[
{
"id": Number,
"customer": Number,
"config": Number
}
]
Todo:
Test cases:
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:
Test cases:
to get the configuration options of a specific product (id)
Request Data:
{
}
Response Data:
[
String
]
Todo:
Test cases:
to order the configured product
Request Data:
{
"configurationName": String,
"options": [String],
"price": Number,
"model": String
}
Response Data:
Todo:
Test cases:
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:
Test cases:
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:
Test cases:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.