Index: frontend/src/App.js
===================================================================
--- frontend/src/App.js	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ frontend/src/App.js	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -1,4 +1,4 @@
 import './App.css';
-import {Route, BrowserRouter as Router, Navigate, Routes} from "react-router-dom";
+import {Route, BrowserRouter as Router, Navigate, Routes, useNavigate} from "react-router-dom";
 import axios from 'axios'
 import env from './env'
@@ -12,8 +12,9 @@
 import Restaurant from "./Dashboard/Restaurant";
 import Menu from "./Dashboard/Menu";
+import Review from "./Dashboard/Review";
 
 
 function App() {
-  const [user, setUser] = useState(false)
+  const [user, setUser] = useState(undefined)
   const [loading, setLoading] = useState(false)
   useEffect(()=>{
@@ -29,18 +30,23 @@
     })
   }
+  const logout = () => {
+    setUser(undefined);
+    sessionStorage.removeItem('Auth');
+    window.location.replace('/')
+  }
   return (
     <div style={{textAlign:'center'}}>
       <Router>
           <Routes>
-            <Route path="/dashboard" element={loading ? <Spin /> : user ?<Dashboard setUser={setUser}/> :  <Navigate to="/login" replace={true} />}>
+            <Route path="/dashboard" element={loading ? <Spin /> : user ? (user.isAdmin ? <Dashboard setUser={setUser}/> : <Navigate to="/" replace={true} />) :  <Navigate to="/login" replace={true} />}>
               <Route path="/dashboard" element={<Restaurant/>}/>
               <Route path="/dashboard/menu" element={<Menu/>}/>
               <Route path="/dashboard/reservations" element={<Reservations/>}/>
-              <Route path="/dashboard/reviews" element={'reviews'}/>
+              <Route path="/dashboard/reviews" element={<Review/>}/>
               <Route path="/dashboard/todo" element={'todo'}/>
             </Route>
             <Route path="/login" element={loading ? <Spin /> :  !user ? <Login setUser={setUser}/> :  <Navigate to="/dashboard" replace={true} />}/>
             <Route path="/register" element={loading ? <Spin /> :  !user ? <Register setUser={setUser}/> :  <Navigate to="/dashboard" replace={true} />}/>
-            <Route path="/" element={<FrontPage/>}/>
+            <Route path="/" element={<FrontPage user={user} logout={logout}/>}/>
           </Routes>
       </Router>
Index: frontend/src/Dashboard/Review.js
===================================================================
--- frontend/src/Dashboard/Review.js	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
+++ frontend/src/Dashboard/Review.js	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -0,0 +1,63 @@
+import React, {useEffect, useState} from 'react'
+import {Button, Card, Input, List, Rate, Spin, Tooltip} from "antd";
+import axios from "axios";
+import env from "../env";
+import moment from "moment";
+
+const Review = props => {
+    const [restaurant, setRestaurant] = useState({});
+    const [loading, setLoading] = useState(true);
+
+    useEffect(()=> {
+        setLoading(true);
+        getRestaurant()
+    },[])
+    useEffect(()=> {
+        getRestaurant()
+    },[props.refresh])
+
+    const getRestaurant = () => {
+        axios.get(env.api + 'Restaurants').then(res=>{
+            setRestaurant(res.data);
+            setLoading(false);
+        });
+    }
+
+    return(
+        <div style={{padding: props.front ? 0 : '20px',textAlign:'start'}}>
+            <div style={{
+                width: '100%',
+                backgroundColor: 'white',
+                padding: '20px',
+                height:'75px',
+                border: '1px solid lightgray'
+            }} id={'expandMain'}>
+                <h2 style={{float: 'left'}}>Оценки</h2>
+                {props.front ?
+                    (props.user?
+                        <Button style={{float:'right'}} type={'primary'} onClick={()=>props.setVisible(true)}>Внеси оценка</Button>
+                        : <Tooltip title={'Мора да се најавите за да оставите оценка'}><Button style={{float:'right'}} disabled type={'primary'} onClick={()=>props.setVisible(true)}>Внеси оценка</Button></Tooltip>)
+                    : ''
+                }
+            </div>
+            {loading ? <Spin style={{margin: '20px'}}/> :
+                <div>
+                    <div style={{backgroundColor: 'white',padding:'10px', border:'1px solid lightgray', borderTop: 'none'}}>
+                        <h3>Средна оценка: <Rate disabled allowHalf value={restaurant.averageReview}/> од вкупно {restaurant.reviews.length} оценки</h3>
+                    </div>
+                    <List dataSource={restaurant.reviews} itemLayout={'horizontal'} locale={{emptyText:'Нема оставени оценки за овој ресторан'}}
+                          renderItem={item => (
+                              <Card title={item.title} style={{width:'98%',backgroundColor:'white',margin:'1%'}}>
+                                  <p>{item.description}</p>
+                                  <Rate disabled value={item.stars}/>
+                                  <p style={{color:'gray'}}>{item.username} / {moment(item.createdAt).format("DD.MM.yyyy")}</p>
+                              </Card>
+                          )}/>
+                </div>
+
+            }
+        </div>
+    )
+}
+
+export default Review;
Index: frontend/src/FrontPage.js
===================================================================
--- frontend/src/FrontPage.js	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ frontend/src/FrontPage.js	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -2,15 +2,18 @@
 import {Header} from "./Header";
 import {useNavigate} from "react-router-dom";
-import {Button, Card, Image, Modal, Spin} from "antd";
+import {Button, Card, DatePicker, Form, Image, Input, Modal, notification, Rate, Spin} from "antd";
 import placeholderImage from '../src/Assets/placeholder.png'
 import AddNewReservation from "./Dashboard/AddNewReservation";
 import axios from "axios";
 import env from "./env";
+import Review from "./Dashboard/Review";
 
-const FrontPage = ({}) => {
+const FrontPage = ({user, logout}) => {
     const [restaurant, setRestaurant] = useState({name:'Sample Restaurant name', address: 'Sample street 1', city:'Sample'});
     const [newReservationModal, setNewReservationModal] = useState(false);
     const [saveModalLoading, setSaveModalLoading] = useState(false);
+    const [newReviewModal, setNewReviewModal] = useState(false);
     const [loading, setLoading] = useState(true);
+    const [refreshToggle, setRefreshToggle] = useState(false);
     const history = useNavigate();
 
@@ -23,7 +26,24 @@
     },[])
 
+    const saveNewReview = data =>{
+        setSaveModalLoading(true)
+        axios.post(env.api + 'Reviews',data,{ headers: {Authorization: sessionStorage.getItem('Auth')}}).then(res=>{
+            setNewReviewModal(false)
+            setSaveModalLoading(false)
+            notification['success']({
+                message: 'Успешно зачувано',
+            });
+            setRefreshToggle(ref => !ref);
+        }).catch(err=>{
+            setSaveModalLoading(false)
+            notification['error']({
+                message: 'Се случи проблем при зачувување',
+            });
+        });
+    }
+
     return(
         <div>
-            <Header onClickButton={()=>history('/login')} buttonText={'Логирај се'}/>
+            <Header onClickButton={!user?()=>history('/login'):logout} buttonText={!user?'Најави се':'Одјави се'}/>
             {loading ? <Spin style={{margin: 20}}/> :
                 <div style={{
@@ -69,11 +89,20 @@
                     </div>
                     <div style={{textAlign: 'start', backgroundColor: '#F2F2F2'}}>
-                        <h2 style={{textAlign:'center',paddingTop:'20px'}}>Мени</h2>
+                        <div style={{
+                            width: '100%',
+                            height:'75px',
+                            backgroundColor: 'white',
+                            padding: '20px',
+                            border: '1px solid lightgray'
+                        }} >
+                            <h2 style={{float: 'left'}}>Мени</h2>
+                        </div>
                         {restaurant.menu.map(el =>
-                            <Card title={el.title} style={{ width: 280, display:'inline-block', margin:'10px' }} size="small">
+                            <Card key={el.id} title={el.title} style={{ width: 280, display:'inline-block', margin:'10px' }} size="small">
                                 <p>{el.description}</p>
                                 <b>{el.price} ден.</b>
                             </Card>
                         )}
+                        <Review user={user} front refresh={refreshToggle} setVisible={setNewReviewModal}/>
                     </div>
                 </div>
@@ -92,8 +121,61 @@
                 <AddNewReservation setModalSaveLoading={setSaveModalLoading} setModalVisible={setNewReservationModal} />
             </Modal>
+            <Modal
+                style={{top: 20}}
+                width={'700px'}
+                title="Нова оценка"
+                footer={[
+                    <Button form="newReviewForm" key="submit" htmlType="submit" type={'primary'} loading={saveModalLoading}>
+                        Прати
+                    </Button>
+                ]}
+                onCancel={()=>setNewReviewModal(false)}
+                visible={newReviewModal}>
+                <Form onFinish={saveNewReview}
+                      id={'newReviewForm'}
+                      onFinishFailed={()=>
+                          notification['error']({
+                              message: 'Ве молиме поправете ги сите грешки пред зачувување!',
+                          })}>
+                    <Form.Item
+                        label="Наслов"
+                        name="title"
+                        rules={[
+                            {
+                                required: true,
+                                message: 'Ве молиме внесете наслов!',
+                            },
+                        ]}
+                    >
+                        <Input/>
+                    </Form.Item>
+                    <Form.Item
+                        label="Опис"
+                        name="description"
+                        rules={[
+                            {
+                                required: true,
+                                message: 'Ве молиме внесете опис!',
+                            },
+                        ]}
+                    >
+                        <Input.TextArea rows={4}/>
+                    </Form.Item>
+                    <Form.Item
+                        label="Оценка"
+                        name="stars"
+                        rules={[
+                            {
+                                required: true,
+                                message: 'Ве молиме внесете оценка!',
+                            },
+                        ]}
+                    >
+                        <Rate/>
+                    </Form.Item>
+                </Form>
+            </Modal>
         </div>
-
     )
 }
-
 export default FrontPage;
Index: frontend/src/auth.js
===================================================================
--- frontend/src/auth.js	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ frontend/src/auth.js	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -21,7 +21,7 @@
             setAuthCookie(res.data.token)
             console.log(res.data.token)
-            setUser(true)
+            setUser(res.data)
             setLoading(false)
-            history('/dashboard')
+            history(res.data.isAdmin ? '/dashboard' : '/')
         }).catch(el => {
             Modal.error({
@@ -101,7 +101,7 @@
         axios.post(env.api+'Users/register',{email: attr.email, password: attr.password}).then(res => {
             setAuthCookie(res.data.token)
-            setUser(true)
+            setUser(res.data)
             setLoading(false)
-            history('/dashboard')
+            history(res.data.isAdmin ? '/dashboard' : '/')
         })
     }
Index: resTools_backend/backend/Controllers/RestaurantsController.cs
===================================================================
--- resTools_backend/backend/Controllers/RestaurantsController.cs	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ resTools_backend/backend/Controllers/RestaurantsController.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -20,4 +20,5 @@
     }
 
+    /*
     [Authorize]
     [HttpPost()]
@@ -30,4 +31,5 @@
         return Ok();
     }
+    */
 
     [HttpGet()]
Index: resTools_backend/backend/Controllers/ReviewsController.cs
===================================================================
--- resTools_backend/backend/Controllers/ReviewsController.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
+++ resTools_backend/backend/Controllers/ReviewsController.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -0,0 +1,37 @@
+﻿using backend.DTOs;
+using backend.Helpers;
+using backend.Services;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+
+namespace backend.Controllers
+{
+    [ApiController]
+    [Route("[controller]")]
+    public class ReviewsController : ControllerBase
+    {
+        private readonly IReviewService _reviewService = null;
+
+        public ReviewsController(IReviewService reviewService)
+        {
+            _reviewService = reviewService;
+        }
+
+
+        [Authorize]
+        [HttpPost()]
+        public async Task<IActionResult> CreateReview([FromBody] CreateReviewRequest req)
+        {
+            int userId = 0;
+            try
+            {
+                userId = (int)this.HttpContext.Items["User"];
+            }
+            catch (Exception ex) { return null; }
+            await _reviewService.AddReview(req, userId);
+            return Ok();
+        }
+
+    }
+
+}
Index: resTools_backend/backend/Controllers/UsersController.cs
===================================================================
--- resTools_backend/backend/Controllers/UsersController.cs	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ resTools_backend/backend/Controllers/UsersController.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -13,8 +13,10 @@
 {
     private readonly IUserService _userService = null;
+    private readonly IRestaurantService _restaurantService = null;
 
-    public UsersController(IUserService userService)
+    public UsersController(IUserService userService, IRestaurantService restaurantService)
     {
         _userService = userService;
+        _restaurantService = restaurantService;
     }
 
@@ -45,5 +47,10 @@
     public async Task<AuthenticateResponse> Register(CreateUserRequest req)
     {
-        var response = await _userService.Register(req);
+        bool isFirst = await _restaurantService.GetRestaurant() == null;
+        var response = await _userService.Register(req, isFirst);
+        if (isFirst)
+        {
+            await _restaurantService.CreateRestaurant("", response.Id);
+        }
         return response;
     }
Index: resTools_backend/backend/DTOs/AuthenticateResponse.cs
===================================================================
--- resTools_backend/backend/DTOs/AuthenticateResponse.cs	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ resTools_backend/backend/DTOs/AuthenticateResponse.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -13,3 +13,5 @@
     [JsonProperty]
     public string Token { get; set; }
+    [JsonProperty]
+    public bool IsAdmin { get; set; }
 }
Index: resTools_backend/backend/DTOs/CreateReviewRequest.cs
===================================================================
--- resTools_backend/backend/DTOs/CreateReviewRequest.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
+++ resTools_backend/backend/DTOs/CreateReviewRequest.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -0,0 +1,9 @@
+﻿namespace backend.DTOs
+{
+    public class CreateReviewRequest
+    {
+        public string Title { get; set; }
+        public string Description { get; set; }
+        public int Stars { get; set; } // 1-5
+    }
+}
Index: resTools_backend/backend/DTOs/RestaurantResponse.cs
===================================================================
--- resTools_backend/backend/DTOs/RestaurantResponse.cs	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ resTools_backend/backend/DTOs/RestaurantResponse.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -14,4 +14,8 @@
         public List<MenuItemResponse> Menu { get; set; }
         [JsonProperty]
+        public List<ReviewResponse> Reviews { get; set; }
+        [JsonProperty]
+        public double AverageReview { get; set; }
+        [JsonProperty]
         public string Base64Image { get; set; }
     }
Index: resTools_backend/backend/DTOs/ReviewResponse.cs
===================================================================
--- resTools_backend/backend/DTOs/ReviewResponse.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
+++ resTools_backend/backend/DTOs/ReviewResponse.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -0,0 +1,12 @@
+﻿namespace backend.DTOs
+{
+    public class ReviewResponse
+    {
+        public int Id { get; set; }
+        public string Title { get; set; }
+        public string Description { get; set; }
+        public int Stars { get; set; } // 1-5
+        public DateTime CreatedAt { get; set; }
+        public string Username { get; set; }
+    }
+}
Index: resTools_backend/backend/Data/DataContext.cs
===================================================================
--- resTools_backend/backend/Data/DataContext.cs	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ resTools_backend/backend/Data/DataContext.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -66,4 +66,18 @@
         }
 
+        private DbSet<Review> reviews;
+        public DbSet<Review> Reviews
+        {
+            get
+            {
+                if (reviews == null)
+                {
+                    reviews = Set<Review>();
+                }
+
+                return reviews;
+            }
+        }
+
 
         protected override void OnModelCreating(ModelBuilder modelBuilder)
@@ -89,7 +103,6 @@
             .WithOne(b => b.Restaurant);
             modelBuilder.Entity<Restaurant>()
-            .HasMany(p => p.Menu)
+            .HasMany(p => p.Reviews)
             .WithOne(b => b.Restaurant);
-
 
             //
@@ -108,4 +121,14 @@
             .HasOne(p => p.Restaurant)
             .WithMany(b => b.Menu);
+
+            //
+            // Review
+            // 
+            modelBuilder.Entity<Review>().Property(x => x.Id).IsRequired().ValueGeneratedOnAdd();
+            modelBuilder.Entity<Review>()
+            .HasOne(p => p.Restaurant)
+            .WithMany(b => b.Reviews);
+            modelBuilder.Entity<Review>()
+            .HasOne(p => p.User);
         }
     }
Index: resTools_backend/backend/Entities/Restaurant.cs
===================================================================
--- resTools_backend/backend/Entities/Restaurant.cs	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ resTools_backend/backend/Entities/Restaurant.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -10,4 +10,5 @@
         public virtual ICollection<Reservation> Reservations { get; set; }
         public virtual ICollection<MenuItem> Menu { get; set; }
+        public virtual ICollection<Review> Reviews { get; set; }
         public string Name { get; set; }
         public string Address { get; set; }
Index: resTools_backend/backend/Entities/Review.cs
===================================================================
--- resTools_backend/backend/Entities/Review.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
+++ resTools_backend/backend/Entities/Review.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -0,0 +1,13 @@
+﻿namespace backend.Entities
+{
+    public class Review
+    {
+        public int Id { get; set; }
+        public string Title { get; set; }
+        public string Description { get; set; }
+        public int Stars { get; set; } // 1-5
+        public DateTime CreatedAt { get; set; }
+        public virtual User User { get; set; }
+        public virtual Restaurant Restaurant { get; set; }
+    }
+}
Index: resTools_backend/backend/Entities/User.cs
===================================================================
--- resTools_backend/backend/Entities/User.cs	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ resTools_backend/backend/Entities/User.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -8,5 +8,5 @@
     public string Email { get; set; }
     public string Password { get; set; }
-    [JsonIgnore]
+    public bool IsAdmin { get; set; }
     public virtual Restaurant Restaurant { get; set; }
 }
Index: resTools_backend/backend/Migrations/20220706122821_Add-Reviews.Designer.cs
===================================================================
--- resTools_backend/backend/Migrations/20220706122821_Add-Reviews.Designer.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
+++ resTools_backend/backend/Migrations/20220706122821_Add-Reviews.Designer.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -0,0 +1,263 @@
+﻿// <auto-generated />
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+using backend.Data;
+
+#nullable disable
+
+namespace backend.Migrations
+{
+    [DbContext(typeof(DataContext))]
+    [Migration("20220706122821_Add-Reviews")]
+    partial class AddReviews
+    {
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("ProductVersion", "6.0.3")
+                .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+            modelBuilder.Entity("backend.Entities.MenuItem", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Description")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<int>("Price")
+                        .HasColumnType("integer");
+
+                    b.Property<int>("RestaurantId")
+                        .HasColumnType("integer");
+
+                    b.Property<string>("Title")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("RestaurantId");
+
+                    b.ToTable("MenuItems");
+                });
+
+            modelBuilder.Entity("backend.Entities.Reservation", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("ContactName")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<string>("ContactNumber")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<int>("Persons")
+                        .HasColumnType("integer");
+
+                    b.Property<int>("ReservationPlace")
+                        .HasColumnType("integer");
+
+                    b.Property<int>("ReservationStatus")
+                        .HasColumnType("integer");
+
+                    b.Property<int>("ReservationType")
+                        .HasColumnType("integer");
+
+                    b.Property<int>("RestaurantId")
+                        .HasColumnType("integer");
+
+                    b.Property<DateTime>("StartDate")
+                        .HasColumnType("timestamp with time zone");
+
+                    b.Property<int>("Table")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("RestaurantId");
+
+                    b.ToTable("Reservations");
+                });
+
+            modelBuilder.Entity("backend.Entities.Restaurant", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Address")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<byte[]>("Image")
+                        .IsRequired()
+                        .HasColumnType("bytea");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<int?>("OwnerFk")
+                        .HasColumnType("integer");
+
+                    b.Property<string>("Phone")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("OwnerFk")
+                        .IsUnique();
+
+                    b.ToTable("Restoraunts");
+                });
+
+            modelBuilder.Entity("backend.Entities.Review", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone");
+
+                    b.Property<string>("Description")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<int>("RestaurantId")
+                        .HasColumnType("integer");
+
+                    b.Property<int>("Stars")
+                        .HasColumnType("integer");
+
+                    b.Property<string>("Title")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("RestaurantId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("Reviews");
+                });
+
+            modelBuilder.Entity("backend.Entities.User", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<string>("Email")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<bool>("IsAdmin")
+                        .HasColumnType("boolean");
+
+                    b.Property<string>("Password")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Users");
+                });
+
+            modelBuilder.Entity("backend.Entities.MenuItem", b =>
+                {
+                    b.HasOne("backend.Entities.Restaurant", "Restaurant")
+                        .WithMany("Menu")
+                        .HasForeignKey("RestaurantId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Restaurant");
+                });
+
+            modelBuilder.Entity("backend.Entities.Reservation", b =>
+                {
+                    b.HasOne("backend.Entities.Restaurant", "Restaurant")
+                        .WithMany("Reservations")
+                        .HasForeignKey("RestaurantId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Restaurant");
+                });
+
+            modelBuilder.Entity("backend.Entities.Restaurant", b =>
+                {
+                    b.HasOne("backend.Entities.User", "Owner")
+                        .WithOne("Restaurant")
+                        .HasForeignKey("backend.Entities.Restaurant", "OwnerFk");
+
+                    b.Navigation("Owner");
+                });
+
+            modelBuilder.Entity("backend.Entities.Review", b =>
+                {
+                    b.HasOne("backend.Entities.Restaurant", "Restaurant")
+                        .WithMany("Reviews")
+                        .HasForeignKey("RestaurantId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("backend.Entities.User", "User")
+                        .WithMany()
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Restaurant");
+
+                    b.Navigation("User");
+                });
+
+            modelBuilder.Entity("backend.Entities.Restaurant", b =>
+                {
+                    b.Navigation("Menu");
+
+                    b.Navigation("Reservations");
+
+                    b.Navigation("Reviews");
+                });
+
+            modelBuilder.Entity("backend.Entities.User", b =>
+                {
+                    b.Navigation("Restaurant")
+                        .IsRequired();
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
Index: resTools_backend/backend/Migrations/20220706122821_Add-Reviews.cs
===================================================================
--- resTools_backend/backend/Migrations/20220706122821_Add-Reviews.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
+++ resTools_backend/backend/Migrations/20220706122821_Add-Reviews.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -0,0 +1,71 @@
+﻿using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace backend.Migrations
+{
+    public partial class AddReviews : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.AddColumn<bool>(
+                name: "IsAdmin",
+                table: "Users",
+                type: "boolean",
+                nullable: false,
+                defaultValue: false);
+
+            migrationBuilder.CreateTable(
+                name: "Reviews",
+                columns: table => new
+                {
+                    Id = table.Column<int>(type: "integer", nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    Title = table.Column<string>(type: "text", nullable: false),
+                    Description = table.Column<string>(type: "text", nullable: false),
+                    Stars = table.Column<int>(type: "integer", nullable: false),
+                    CreatedAt = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+                    UserId = table.Column<int>(type: "integer", nullable: false),
+                    RestaurantId = table.Column<int>(type: "integer", nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Reviews", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_Reviews_Restoraunts_RestaurantId",
+                        column: x => x.RestaurantId,
+                        principalTable: "Restoraunts",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_Reviews_Users_UserId",
+                        column: x => x.UserId,
+                        principalTable: "Users",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Reviews_RestaurantId",
+                table: "Reviews",
+                column: "RestaurantId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Reviews_UserId",
+                table: "Reviews",
+                column: "UserId");
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropTable(
+                name: "Reviews");
+
+            migrationBuilder.DropColumn(
+                name: "IsAdmin",
+                table: "Users");
+        }
+    }
+}
Index: resTools_backend/backend/Migrations/DataContextModelSnapshot.cs
===================================================================
--- resTools_backend/backend/Migrations/DataContextModelSnapshot.cs	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ resTools_backend/backend/Migrations/DataContextModelSnapshot.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -131,4 +131,41 @@
                 });
 
+            modelBuilder.Entity("backend.Entities.Review", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("integer");
+
+                    NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+                    b.Property<DateTime>("CreatedAt")
+                        .HasColumnType("timestamp with time zone");
+
+                    b.Property<string>("Description")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<int>("RestaurantId")
+                        .HasColumnType("integer");
+
+                    b.Property<int>("Stars")
+                        .HasColumnType("integer");
+
+                    b.Property<string>("Title")
+                        .IsRequired()
+                        .HasColumnType("text");
+
+                    b.Property<int>("UserId")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("RestaurantId");
+
+                    b.HasIndex("UserId");
+
+                    b.ToTable("Reviews");
+                });
+
             modelBuilder.Entity("backend.Entities.User", b =>
                 {
@@ -142,4 +179,7 @@
                         .IsRequired()
                         .HasColumnType("text");
+
+                    b.Property<bool>("IsAdmin")
+                        .HasColumnType("boolean");
 
                     b.Property<string>("Password")
@@ -183,4 +223,23 @@
                 });
 
+            modelBuilder.Entity("backend.Entities.Review", b =>
+                {
+                    b.HasOne("backend.Entities.Restaurant", "Restaurant")
+                        .WithMany("Reviews")
+                        .HasForeignKey("RestaurantId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("backend.Entities.User", "User")
+                        .WithMany()
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.Navigation("Restaurant");
+
+                    b.Navigation("User");
+                });
+
             modelBuilder.Entity("backend.Entities.Restaurant", b =>
                 {
@@ -188,4 +247,6 @@
 
                     b.Navigation("Reservations");
+
+                    b.Navigation("Reviews");
                 });
 
Index: resTools_backend/backend/Program.cs
===================================================================
--- resTools_backend/backend/Program.cs	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ resTools_backend/backend/Program.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -47,4 +47,5 @@
 builder.Services.AddScoped<IReservationService, ReservationService>();
 builder.Services.AddScoped<IMenuService, MenuService>();
+builder.Services.AddScoped<IReviewService, ReviewService>();
 builder.Services.AddScoped<ISmsService, SmsService>();
 
Index: resTools_backend/backend/Services/RestaurantService.cs
===================================================================
--- resTools_backend/backend/Services/RestaurantService.cs	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ resTools_backend/backend/Services/RestaurantService.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -32,4 +32,6 @@
         {
             RestaurantResponse res = await _context.Restoraunts
+                .Include(x => x.Menu)
+                .Include(x => x.Reviews).ThenInclude(x => x.User)
                 .Select(x => new RestaurantResponse()
                 {
@@ -44,5 +46,15 @@
                         Description = x.Description,
                         Price = x.Price
-                    }).ToList()
+                    }).ToList(),
+                    Reviews = x.Reviews.OrderByDescending(x => x.CreatedAt).Select(x => new ReviewResponse()
+                    {
+                        Id = x.Id,
+                        Title = x.Title,
+                        Description = x.Description,
+                        Stars = x.Stars,
+                        CreatedAt = x.CreatedAt,
+                        Username = x.User == null ? "Anonymous" : x.User.Email
+                    }).ToList(),
+                    AverageReview = x.Reviews.Count>0 ? x.Reviews.Select(x => x.Stars).Average() : 0
                 })
                 .FirstOrDefaultAsync();
Index: resTools_backend/backend/Services/ReviewService.cs
===================================================================
--- resTools_backend/backend/Services/ReviewService.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
+++ resTools_backend/backend/Services/ReviewService.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -0,0 +1,41 @@
+﻿using backend.Data;
+using backend.DTOs;
+using backend.Entities;
+using Microsoft.EntityFrameworkCore;
+
+namespace backend.Services
+{
+    public interface IReviewService
+    {
+        public Task AddReview(CreateReviewRequest review, int userId);
+    }
+    public class ReviewService : IReviewService
+    {
+        private readonly DataContext _context = null;
+
+        public ReviewService(DataContext context)
+        {
+            _context = context;
+        }
+
+        public async Task AddReview(CreateReviewRequest review, int userId)
+        {
+            var user = await _context.Users.FindAsync(userId);
+            var res = await _context.Restoraunts.Include(x => x.Reviews).FirstOrDefaultAsync();
+            if(res.Reviews == null)
+            {
+                res.Reviews = new List<Review>();
+            }
+            res.Reviews.Add(new Review()
+            {
+                Title = review.Title,
+                Description = review.Description,
+                Stars = review.Stars,
+                CreatedAt = DateTime.UtcNow,
+                User = user
+            });
+            _context.Restoraunts.Update(res);
+            await _context.SaveChangesAsync();
+        }
+    }
+}
Index: resTools_backend/backend/Services/UserService.cs
===================================================================
--- resTools_backend/backend/Services/UserService.cs	(revision cc4db18b6d338be00c6c1e9b88f8e93ef763f7b6)
+++ resTools_backend/backend/Services/UserService.cs	(revision 899b19da4d7326788e23e45dd1881ec1395e1d88)
@@ -15,5 +15,5 @@
 {
     Task<AuthenticateResponse> Authenticate(AuthenticateRequest model);
-    Task<AuthenticateResponse> Register(CreateUserRequest req);
+    Task<AuthenticateResponse> Register(CreateUserRequest req, bool isFirst);
     Task<User> GetById(int id);
 }
@@ -40,5 +40,5 @@
         var token = generateJwtToken(user);
 
-        return new AuthenticateResponse { Email = user.Email, Id = user.Id, Token = token};
+        return new AuthenticateResponse { Email = user.Email, Id = user.Id, Token = token, IsAdmin = user.IsAdmin};
     }
 
@@ -48,11 +48,11 @@
     }
 
-    public async Task<AuthenticateResponse> Register(CreateUserRequest req)
+    public async Task<AuthenticateResponse> Register(CreateUserRequest req, bool isFirst)
     {
-        User user = new User() { Email = req.Email, Password = req.Password };
+        User user = new User() { Email = req.Email, Password = req.Password, IsAdmin = isFirst };
         await _context.Users.AddAsync(user);
         await _context.SaveChangesAsync();
         var token = generateJwtToken(user);
-        return new AuthenticateResponse { Email = user.Email, Id = user.Id, Token = token };
+        return new AuthenticateResponse { Email = user.Email, Id = user.Id, Token = token, IsAdmin = user.IsAdmin };
     }
 
