diff --git a/week-2/mandatory/2-ecommerce-db/commerce-data b/week-2/mandatory/2-ecommerce-db/commerce-data
new file mode 100644
index 00000000..b84ad38a
--- /dev/null
+++ b/week-2/mandatory/2-ecommerce-db/commerce-data
@@ -0,0 +1,85 @@
+ --SELECT products.product_name, p.unit_price, s.supplier_name
+ ---FROM product p
+ --INNER JOIN suppliers
+ ----ON p.id= s.products_id;
+
+que 1. SELECT *FROM customers WHERE country = 'United States';
+Que2. SELECT * FROM customers ORDER BY name; or SELECT * FROM customers ORDER BY name asc;
+ Que3. SELECT * FROM products WHERE unit_price > 100;
+
+ que4. SELECT * FROM products WHERE product_name LIKE '%socks%';
+
+ Que5. SELECT * from products ORDER BY unit_price DESC LIMIT 5;
+ Que6. SELECT product_name, unit_price, supplier_name FROM products, suppliers WHERE products.supplier_id = suppliers.id;
+
+
+
+ Que7. SELECT product_name, supplier_name FROM products, suppliers WHERE products.supplier_id = suppliers.id AND suppliers.country = 'United Kingdom';
+
+ Q8. SELECT * FROM orders, customers WHERE orders.customer_id = customers.id AND customers.id = 1;
+ cyf_ecommerce=> SELECT * FROM orders;
+ id | order_date | order_reference | customer_id
+----+------------+-----------------+-------------
+ 1 | 2019-06-01 | ORD001 | 1
+ 2 | 2019-07-15 | ORD002 | 1
+ 3 | 2019-07-11 | ORD003 | 1
+ 4 | 2019-05-24 | ORD004 | 2
+ 5 | 2019-05-30 | ORD005 | 3
+ 6 | 2019-07-05 | ORD006 | 4
+ 7 | 2019-04-05 | ORD007 | 4
+ 8 | 2019-07-23 | ORD008 | 5
+ 9 | 2019-07-24 | ORD009 | 5
+ 10 | 2019-05-10 | ORD010 | 5
+(10 rows)
+
+ q9. SELECT * FROM orders, customers WHERE orders.customer_id = customers.id AND customers.name = 'Hope Crosby';
+
+cyf_ecommerce=> SELECT * FROM products;
+ id | product_name | unit_price | supplier_id
+----+-------------------------+------------+-------------
+ 1 | Tee Shirt Olympic Games | 20 | 1
+ 2 | Tee Shirt Olympic Games | 18 | 2
+ 3 | Tee Shirt Olympic Games | 21 | 3
+ 4 | Mobile Phone X | 299 | 1
+ 5 | Mobile Phone X | 249 | 4
+ 6 | Super warm socks | 10 | 1
+ 7 | Super warm socks | 5 | 2
+ 8 | Super warm socks | 8 | 3
+ 9 | Super warm socks | 10 | 4
+ 10 | Le Petit Prince | 10 | 1
+ 11 | Le Petit Prince | 10 | 4
+ 12 | Ball | 14 | 1
+ 13 | Ball | 15 | 4
+ 14 | Ball | 20 | 2
+ 15 | Javascript Book | 40 | 1
+ 16 | Javascript Book | 39 | 3
+ 17 | Javascript Book | 41 | 2
+ 18 | Coffee Cup | 3 | 1
+ 19 | Coffee Cup | 4 | 2
+ 20 | Coffee Cup | 4 | 3
+ 21 | Coffee Cup | 5 | 4
+(21 rows)
+
+Retrieve all the products in the order `ORD006`. The result should only contain the columns `product_name`, `unit_price` and `quantity`.
+10. SELECT * FROM products,orders,order_items WHERE order_items.order_id=orders.id AND order_items.product_id=products.id AND orders.order_reference='ORD006';
+
+ id | product_name | unit_price | supplier_id | id | order_date | order_reference | customer_id | id | order_id | product_id | quantity
+----+------------------+------------+-------------+----+------------+-----------------+-------------+----+----------+------------+----------
+ 19 | Coffee Cup | 4 | 2 | 6 | 2019-07-05 | ORD006 | 4 | 10 | 6 | 19 | 3
+ 17 | Javascript Book | 41 | 2 | 6 | 2019-07-05 | ORD006 | 4 | 11 | 6 | 17 | 1
+ 11 | Le Petit Prince | 10 | 4 | 6 | 2019-07-05 | ORD006 | 4 | 12 | 6 | 11 | 1
+ 9 | Super warm socks | 10 | 4 | 6 | 2019-07-05 | ORD006 | 4 | 13 | 6 | 9 | 3
+(4 rows)
+
+
+Q11. Retrieve all the products with their supplier for all orders of all customers. The result should only contain the columns `name` (from customer), `order_reference` `order_date`, `product_name`, `supplier_name` and `quantity`.
+11. SELECT customers.name, order_reference, order_date, product_name, supplier_name, quantity FROM customers, suppliers, orders, products, order_items WHERE order_items.order_id=orders.id AND order_items.product_id=products.id AND customers.id=orders.customer_id AND suppliers.id=products.id;
+
+
+
+12. SELECT customers.name FROM customers,suppliers,orders,products,order_items WHERE order_items.order_id=orders.id AND order_items.product_id=products.id AND customers.id=orders.customer_id AND suppliers.id=products.id AND suppliers.country='China';
+
+ name
+--------------
+ Guy Crawford
+(1 row)
diff --git a/week-2/mandatory/2-ecommerce-db/cyf_ecommerce.sql b/week-2/mandatory/2-ecommerce-db/cyf_ecommerce.sql
index 77253e2e..7a1f7dfb 100644
--- a/week-2/mandatory/2-ecommerce-db/cyf_ecommerce.sql
+++ b/week-2/mandatory/2-ecommerce-db/cyf_ecommerce.sql
@@ -37,10 +37,10 @@ CREATE TABLE order_items (
order_id INT REFERENCES orders(id),
product_id INT REFERENCES products(id),
quantity INT NOT NULL
-);
+);'United Kingdom'
INSERT INTO customers (name, address, city, country) VALUES ('Guy Crawford','770-2839 Ligula Road','Paris','France');
-INSERT INTO customers (name, address, city, country) VALUES ('Hope Crosby','P.O. Box 276, 4976 Sit Rd.','Steyr','United Kingdom');
+INSERT INTO customers (name, address, city, country) VALUES ('Hope Crosby','P.O. Box 276, 4976 Sit Rd.','Steyr',);
INSERT INTO customers (name, address, city, country) VALUES ('Britanney Kirkland','P.O. Box 577, 5601 Sem, St.','Little Rock','United Kingdom');
INSERT INTO customers (name, address, city, country) VALUES ('Amber Tran','6967 Ac Road','Villafranca Asti','United States');
INSERT INTO customers (name, address, city, country) VALUES ('Edan Higgins','Ap #840-3255 Tincidunt St.','Arles','United States');
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/.gitignore b/week-2/mandatory/3-api/cyf_ecommerce-api/.gitignore
new file mode 100644
index 00000000..97aca2ea
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/.gitignore
@@ -0,0 +1,2 @@
+.env
+node_modules
\ No newline at end of file
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/is-ci b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/is-ci
new file mode 100644
index 00000000..e79342ff
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/is-ci
@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ "$basedir/node" "$basedir/../is-ci/bin.js" "$@"
+ ret=$?
+else
+ node "$basedir/../is-ci/bin.js" "$@"
+ ret=$?
+fi
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/is-ci.cmd b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/is-ci.cmd
new file mode 100644
index 00000000..e3276c08
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/is-ci.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%" "%dp0%\..\is-ci\bin.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/is-ci.ps1 b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/is-ci.ps1
new file mode 100644
index 00000000..3fe23403
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/is-ci.ps1
@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ & "$basedir/node$exe" "$basedir/../is-ci/bin.js" $args
+ $ret=$LASTEXITCODE
+} else {
+ & "node$exe" "$basedir/../is-ci/bin.js" $args
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/mime b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/mime
new file mode 100644
index 00000000..91e5e16a
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/mime
@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ "$basedir/node" "$basedir/../mime/cli.js" "$@"
+ ret=$?
+else
+ node "$basedir/../mime/cli.js" "$@"
+ ret=$?
+fi
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/mime.cmd b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/mime.cmd
new file mode 100644
index 00000000..746a2798
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/mime.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%" "%dp0%\..\mime\cli.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/mime.ps1 b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/mime.ps1
new file mode 100644
index 00000000..a6f6f470
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/mime.ps1
@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ & "$basedir/node$exe" "$basedir/../mime/cli.js" $args
+ $ret=$LASTEXITCODE
+} else {
+ & "node$exe" "$basedir/../mime/cli.js" $args
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodemon b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodemon
new file mode 100644
index 00000000..439386d9
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodemon
@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ "$basedir/node" "$basedir/../nodemon/bin/nodemon.js" "$@"
+ ret=$?
+else
+ node "$basedir/../nodemon/bin/nodemon.js" "$@"
+ ret=$?
+fi
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodemon.cmd b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodemon.cmd
new file mode 100644
index 00000000..2ef28880
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodemon.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%" "%dp0%\..\nodemon\bin\nodemon.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodemon.ps1 b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodemon.ps1
new file mode 100644
index 00000000..413e5cb8
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodemon.ps1
@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ & "$basedir/node$exe" "$basedir/../nodemon/bin/nodemon.js" $args
+ $ret=$LASTEXITCODE
+} else {
+ & "node$exe" "$basedir/../nodemon/bin/nodemon.js" $args
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodetouch b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodetouch
new file mode 100644
index 00000000..1f7f0015
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodetouch
@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ "$basedir/node" "$basedir/../touch/bin/nodetouch.js" "$@"
+ ret=$?
+else
+ node "$basedir/../touch/bin/nodetouch.js" "$@"
+ ret=$?
+fi
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodetouch.cmd b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodetouch.cmd
new file mode 100644
index 00000000..1f78c68a
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodetouch.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%" "%dp0%\..\touch\bin\nodetouch.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodetouch.ps1 b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodetouch.ps1
new file mode 100644
index 00000000..236659ce
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nodetouch.ps1
@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ & "$basedir/node$exe" "$basedir/../touch/bin/nodetouch.js" $args
+ $ret=$LASTEXITCODE
+} else {
+ & "node$exe" "$basedir/../touch/bin/nodetouch.js" $args
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nopt b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nopt
new file mode 100644
index 00000000..e658aac4
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nopt
@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ "$basedir/node" "$basedir/../nopt/bin/nopt.js" "$@"
+ ret=$?
+else
+ node "$basedir/../nopt/bin/nopt.js" "$@"
+ ret=$?
+fi
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nopt.cmd b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nopt.cmd
new file mode 100644
index 00000000..c92ec036
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nopt.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%" "%dp0%\..\nopt\bin\nopt.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nopt.ps1 b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nopt.ps1
new file mode 100644
index 00000000..68c40bf9
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/nopt.ps1
@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ & "$basedir/node$exe" "$basedir/../nopt/bin/nopt.js" $args
+ $ret=$LASTEXITCODE
+} else {
+ & "node$exe" "$basedir/../nopt/bin/nopt.js" $args
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/rc b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/rc
new file mode 100644
index 00000000..9e016267
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/rc
@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ "$basedir/node" "$basedir/../rc/cli.js" "$@"
+ ret=$?
+else
+ node "$basedir/../rc/cli.js" "$@"
+ ret=$?
+fi
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/rc.cmd b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/rc.cmd
new file mode 100644
index 00000000..aedece9d
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/rc.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%" "%dp0%\..\rc\cli.js" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/rc.ps1 b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/rc.ps1
new file mode 100644
index 00000000..ac2cd2a5
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/rc.ps1
@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ & "$basedir/node$exe" "$basedir/../rc/cli.js" $args
+ $ret=$LASTEXITCODE
+} else {
+ & "node$exe" "$basedir/../rc/cli.js" $args
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/semver b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/semver
new file mode 100644
index 00000000..10497aa8
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/semver
@@ -0,0 +1,15 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ "$basedir/node" "$basedir/../semver/bin/semver" "$@"
+ ret=$?
+else
+ node "$basedir/../semver/bin/semver" "$@"
+ ret=$?
+fi
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/semver.cmd b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/semver.cmd
new file mode 100644
index 00000000..eb3aaa1e
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/semver.cmd
@@ -0,0 +1,17 @@
+@ECHO off
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+ SET "_prog=%dp0%\node.exe"
+) ELSE (
+ SET "_prog=node"
+ SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+"%_prog%" "%dp0%\..\semver\bin\semver" %*
+ENDLOCAL
+EXIT /b %errorlevel%
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/semver.ps1 b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/semver.ps1
new file mode 100644
index 00000000..a3315ffc
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/.bin/semver.ps1
@@ -0,0 +1,18 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+ # Fix case when both the Windows and Linux builds of Node
+ # are installed in the same directory
+ $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+ & "$basedir/node$exe" "$basedir/../semver/bin/semver" $args
+ $ret=$LASTEXITCODE
+} else {
+ & "node$exe" "$basedir/../semver/bin/semver" $args
+ $ret=$LASTEXITCODE
+}
+exit $ret
diff --git a/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/@sindresorhus/is/dist/index.d.ts b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/@sindresorhus/is/dist/index.d.ts
new file mode 100644
index 00000000..e94d30b7
--- /dev/null
+++ b/week-2/mandatory/3-api/cyf_ecommerce-api/node_modules/@sindresorhus/is/dist/index.d.ts
@@ -0,0 +1,132 @@
+///
+///
+///
+///
+///
+declare type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array;
+declare type Primitive = null | undefined | string | number | boolean | Symbol;
+export interface ArrayLike {
+ length: number;
+}
+export interface Class {
+ new (...args: any[]): T;
+}
+declare type DomElement = object & {
+ nodeType: 1;
+ nodeName: string;
+};
+declare type NodeStream = object & {
+ pipe: Function;
+};
+export declare const enum TypeName {
+ null = "null",
+ boolean = "boolean",
+ undefined = "undefined",
+ string = "string",
+ number = "number",
+ symbol = "symbol",
+ Function = "Function",
+ GeneratorFunction = "GeneratorFunction",
+ AsyncFunction = "AsyncFunction",
+ Observable = "Observable",
+ Array = "Array",
+ Buffer = "Buffer",
+ Object = "Object",
+ RegExp = "RegExp",
+ Date = "Date",
+ Error = "Error",
+ Map = "Map",
+ Set = "Set",
+ WeakMap = "WeakMap",
+ WeakSet = "WeakSet",
+ Int8Array = "Int8Array",
+ Uint8Array = "Uint8Array",
+ Uint8ClampedArray = "Uint8ClampedArray",
+ Int16Array = "Int16Array",
+ Uint16Array = "Uint16Array",
+ Int32Array = "Int32Array",
+ Uint32Array = "Uint32Array",
+ Float32Array = "Float32Array",
+ Float64Array = "Float64Array",
+ ArrayBuffer = "ArrayBuffer",
+ SharedArrayBuffer = "SharedArrayBuffer",
+ DataView = "DataView",
+ Promise = "Promise",
+ URL = "URL"
+}
+declare function is(value: unknown): TypeName;
+declare namespace is {
+ const undefined: (value: unknown) => value is undefined;
+ const string: (value: unknown) => value is string;
+ const number: (value: unknown) => value is number;
+ const function_: (value: unknown) => value is Function;
+ const null_: (value: unknown) => value is null;
+ const class_: (value: unknown) => value is Class;
+ const boolean: (value: unknown) => value is boolean;
+ const symbol: (value: unknown) => value is Symbol;
+ const numericString: (value: unknown) => boolean;
+ const array: (arg: any) => arg is any[];
+ const buffer: (input: unknown) => input is Buffer;
+ const nullOrUndefined: (value: unknown) => value is null | undefined;
+ const object: (value: unknown) => value is object;
+ const iterable: (value: unknown) => value is IterableIterator;
+ const asyncIterable: (value: unknown) => value is AsyncIterableIterator;
+ const generator: (value: unknown) => value is Generator;
+ const nativePromise: (value: unknown) => value is Promise;
+ const promise: (value: unknown) => value is Promise;
+ const generatorFunction: (value: unknown) => value is GeneratorFunction;
+ const asyncFunction: (value: unknown) => value is Function;
+ const boundFunction: (value: unknown) => value is Function;
+ const regExp: (value: unknown) => value is RegExp;
+ const date: (value: unknown) => value is Date;
+ const error: (value: unknown) => value is Error;
+ const map: (value: unknown) => value is Map;
+ const set: (value: unknown) => value is Set;
+ const weakMap: (value: unknown) => value is WeakMap