Voor de backend hebben we gekozen om een PHP framework 'Laravel' te gebruiken. We hebben het zo gemaakt dat de backend geen HTML genereert, maar door middel van verzoeken via de URL gegevens en variabelen in JSON formaat terug stuurt.
Die gegevens worden opgeslagen in een database. Hier heb ik dit database model voor gemaakt.
Voor de Front end wilden we een schaalbaar systeem om makkelijk gegevens uit een REST API (onze Laravel API dus) te halen en dynamisch weer te geven. Hiervoor gebruiken we "React.JS"
Proces - Van code naar product
Als de gebruiker in de applicatie inlogt, dan worden de gegevens van deze gebruiker opgehaald in de back-end en die stuurt dan alles terug in JSON. Dat kan bijvoorbeeld dit zijn:
Stel de gebruiker heeft iets behaald en krijgt een achievement, dan gebeurt er bijvoorbeeld dit:
UserController.php
public function addAchievements(Request $request)
{
$user = Auth::guard('api')->user();
if(!$user->isAdmin())
{
return response()->json(['error' => 'Not Authorized. You need to be an admin.'], 401);
}
$validator = Validator::make($request->all(),[
'user_id' => 'required|integer|exists:users,id',
'achievement' => 'required|integer',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 400);
}
$achievement = $request->achievement;
$user = User::where('id', $request->user_id)->first();
$data = json_decode($user->data, true);
if(empty($data))
{
$data = array();
}
array_push($data['achievements'], $achievement);
$user->data = json_encode($data);
$user->save();
return response()->json(['result' => 'isAdmin', 'user' => $user], 200);
}
Er wordt gecontroleerd of de gebruiker die een achievement toevoegt wel de goede rechten heeft. Dan wordt de behaalde achievement aan de goede gebruiker gekoppeld en opgeslagen.
Front-end in ReactJS
In de front-end pakt React deze data (JSON van de gebruiker hierboven) en genereert zo "components" met de data erin. Ik heb bijvoorbeeld aan het winkel gedeelte van de app gewerkt. Dat ziet er zo uit:
Een gebruiker kan iets kopen en er wordt achter de schermen gekeken of hij wel genoeg schmeckles heeft voor dat product.
Door in React zoveel mogelijk op te delen in componenten is alles mega overzichtelijk en makkelijk aan te passen en bij te houden.
Doorontwikkeling
Omdat we voor de front-end en de back-end frameworks gebruiken en dus ook de conventies van die frameworks toepassen, is het ideaal omhoog te schalen naar een grote applicatie. Hier hebben we zelf in twee weken geen tijd voor gehad, maar het is zeker een optie.