Index: resTools_backend/backend/Services/ReservationService.cs
===================================================================
--- resTools_backend/backend/Services/ReservationService.cs	(revision 7a983b0054a13b5462a3e4a09e6fe5bf350d0949)
+++ resTools_backend/backend/Services/ReservationService.cs	(revision 7a983b0054a13b5462a3e4a09e6fe5bf350d0949)
@@ -0,0 +1,51 @@
+﻿using backend.Data;
+using backend.DTOs;
+using backend.Entities;
+using Microsoft.EntityFrameworkCore;
+
+namespace backend.Services
+{
+    public interface IReservationService
+    {
+        public Task CreateReservation(CreateReservationRequest req);
+        public Task ChangeReservationStatus(int resId, ReservationStatus status);
+    }
+    public class ReservationService : IReservationService
+    {
+        private readonly DataContext _context = null;
+        private readonly ISmsService _smsService = null;
+
+        public ReservationService(DataContext context, ISmsService smsService)
+        {
+            _context = context;
+            _smsService = smsService;
+        }
+
+        public async Task ChangeReservationStatus(int resId, ReservationStatus status)
+        {
+            var reservation = await _context.Reservations.FindAsync(resId);
+            reservation.ReservationStatus = status;
+            _context.Update(reservation);
+            await _context.SaveChangesAsync();
+            _smsService.ReservationStatusUpdate(reservation.ContactName, reservation.ContactNumber, reservation.ReservationStatus);
+        }
+
+        public async Task CreateReservation(CreateReservationRequest req)
+        {
+            Restaurant res = await _context.Restoraunts.Include(x => x.Reservations).FirstOrDefaultAsync();
+            Reservation reservation = new Reservation()
+            {
+                ContactName = req.ContactName,
+                ContactNumber = req.ContactNumber,
+                ReservationPlace = req.ReservationPlace,
+                ReservationType = req.ReservationType,
+                StartDate = req.StartDate,
+                Persons = req.Persons,
+                ReservationStatus = ReservationStatus.New
+            };
+            res.Reservations.Add(reservation);
+            _context.Restoraunts.Update(res);
+            await _context.SaveChangesAsync();
+        }
+    }
+}
Index: resTools_backend/backend/Services/RestaurantService.cs
===================================================================
--- resTools_backend/backend/Services/RestaurantService.cs	(revision 7a983b0054a13b5462a3e4a09e6fe5bf350d0949)
+++ resTools_backend/backend/Services/RestaurantService.cs	(revision 7a983b0054a13b5462a3e4a09e6fe5bf350d0949)
@@ -0,0 +1,54 @@
+﻿using backend.Data;
+using backend.DTOs;
+using backend.Entities;
+using Microsoft.EntityFrameworkCore;
+
+namespace backend.Services
+{
+    public interface IRestaurantService
+    {
+        public Task CreateRestaurant(string name, int userId);
+        public Task<RestaurantResponse> GetRestaurant();
+    }
+    public class RestaurantService : IRestaurantService
+    {
+        private readonly DataContext _context = null;
+
+        public RestaurantService(DataContext context)
+        {
+            _context = context;
+        }
+        public async Task CreateRestaurant(string name, int userId)
+        {
+            User user = await _context.Users.FindAsync(userId);
+            Restaurant restaurant = new Restaurant() { Name = name, Owner = user};
+            await _context.Restoraunts.AddAsync(restaurant);
+            await _context.SaveChangesAsync();
+        }
+
+        public async Task<RestaurantResponse> GetRestaurant()
+        {
+            RestaurantResponse res = await _context.Restoraunts
+                .Include(x => x.Reservations)
+                .Select(x => new RestaurantResponse()
+                {
+                    Id = x.Id,
+                    Name = x.Name,
+                    OwnerId = x.OwnerFk,
+                    Reservations = x.Reservations.Select(t => new ReservationResponse()
+                    {
+                        ContactName = t.ContactName,
+                        ContactNumber = t.ContactNumber,
+                        Persons = t.Persons,
+                        StartDate = t.StartDate,
+                        ReservationStatus = t.ReservationStatus,
+                        Id = t.Id,
+                        ReservationPlace = t.ReservationPlace,
+                        ReservationType = t.ReservationType
+                    }).ToList()
+                })
+                .FirstOrDefaultAsync();
+            return res;
+        }
+    }
+}
Index: resTools_backend/backend/Services/SmsService.cs
===================================================================
--- resTools_backend/backend/Services/SmsService.cs	(revision 7a983b0054a13b5462a3e4a09e6fe5bf350d0949)
+++ resTools_backend/backend/Services/SmsService.cs	(revision 7a983b0054a13b5462a3e4a09e6fe5bf350d0949)
@@ -0,0 +1,20 @@
+﻿using backend.Entities;
+
+namespace backend.Services
+{
+    public interface ISmsService
+    {
+        public Task ReservationStatusUpdate(string name, string number, ReservationStatus newStatus);
+    }
+    public class SmsService : ISmsService
+    {
+        public async Task ReservationStatusUpdate(string name, string number, ReservationStatus newStatus)
+        {
+            string message = $"Hello {name}, the status of your reservation was changed to: { Enum.GetName(typeof(ReservationStatus), newStatus)}";
+
+            // simulate sending sms
+            await Task.Delay(100);
+            Console.WriteLine(message);
+        }
+    }
+}
Index: resTools_backend/backend/Services/UserService.cs
===================================================================
--- resTools_backend/backend/Services/UserService.cs	(revision 7a983b0054a13b5462a3e4a09e6fe5bf350d0949)
+++ resTools_backend/backend/Services/UserService.cs	(revision 7a983b0054a13b5462a3e4a09e6fe5bf350d0949)
@@ -0,0 +1,73 @@
+namespace backend.Services;
+
+using backend.Data;
+using backend.DTOs;
+using backend.Entities;
+using backend.Helpers;
+using backend.Models;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Options;
+using Microsoft.IdentityModel.Tokens;
+using System.IdentityModel.Tokens.Jwt;
+using System.Security.Claims;
+
+public interface IUserService
+{
+    Task<AuthenticateResponse> Authenticate(AuthenticateRequest model);
+    Task<AuthenticateResponse> Register(CreateUserRequest req);
+    Task<User> GetById(int id);
+}
+
+public class UserService : IUserService
+{
+    private readonly AppSettings _appSettings;
+    private readonly DataContext _context = null;
+
+    public UserService(IOptions<AppSettings> appSettings, DataContext context)
+    {
+        _appSettings = appSettings.Value;
+        _context = context;
+    }
+
+    public async Task<AuthenticateResponse> Authenticate(AuthenticateRequest model)
+    {
+        User user = await _context.Users.FirstOrDefaultAsync(x => x.Email == model.Email && x.Password == model.Password);
+
+        // return null if user not found
+        if (user == null) return null;
+
+        // authentication successful so generate jwt token
+        var token = generateJwtToken(user);
+
+        return new AuthenticateResponse { Email = user.Email, Id = user.Id, Token = token};
+    }
+
+    public async Task<User> GetById(int id)
+    {
+        return await _context.Users.FindAsync(id);
+    }
+
+    public async Task<AuthenticateResponse> Register(CreateUserRequest req)
+    {
+        User user = new User() { Email = req.Email, Password = req.Password };
+        await _context.Users.AddAsync(user);
+        await _context.SaveChangesAsync();
+        var token = generateJwtToken(user);
+        return new AuthenticateResponse { Email = user.Email, Id = user.Id, Token = token };
+    }
+
+    private string generateJwtToken(User user)
+    {
+        // generate token that is valid for 7 days
+        var tokenHandler = new JwtSecurityTokenHandler();
+        var key = System.Text.Encoding.ASCII.GetBytes(_appSettings.Secret);
+        var tokenDescriptor = new SecurityTokenDescriptor
+        {
+            Subject = new ClaimsIdentity(new[] { new Claim("id", user.Id.ToString()) }),
+            Expires = DateTime.UtcNow.AddDays(7),
+            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
+        };
+        var token = tokenHandler.CreateToken(tokenDescriptor);
+        return tokenHandler.WriteToken(token);
+    }
+}
