Index: .gitignore
===================================================================
--- .gitignore	(revision dced4799f2687599a13ca1283cad71a6864b15af)
+++ .gitignore	(revision 93c368a431f87f49f4df37ae7c04be95baf7f484)
@@ -362,2 +362,4 @@
 # Fody - auto-generated XML schema
 FodyWeavers.xsd
+# Local DB credentials (see appsettings.Development.json.example)
+appsettings.Development.json
Index: iknow-api/Repository/Implementations/RefreshTokenRepository.cs
===================================================================
--- iknow-api/Repository/Implementations/RefreshTokenRepository.cs	(revision 93c368a431f87f49f4df37ae7c04be95baf7f484)
+++ iknow-api/Repository/Implementations/RefreshTokenRepository.cs	(revision 93c368a431f87f49f4df37ae7c04be95baf7f484)
@@ -0,0 +1,49 @@
+using iknow_api.Models;
+using iknow_api.Data;
+using iknow_api.Models;
+using Microsoft.EntityFrameworkCore;
+using iknow_api.Services;
+using iknow_api.DTOs;
+using System.Runtime.CompilerServices;
+
+namespace iknow_api.Repositories
+{
+    public class RefreshTokenRepository : IRefreshTokenRepository
+    {
+        private readonly AppDbContext _context;
+
+        public RefreshTokenRepository(AppDbContext context)
+        {
+            _context = context;
+        }
+        
+        public async Task AddTokenAsync(RefreshToken refreshToken)
+        {
+             _context.RefreshToken.Add(refreshToken);
+            await _context.SaveChangesAsync();
+        }
+
+        public Task<bool> DeleteTokenAsync(string refreshTokenDto)
+        {
+            throw new NotImplementedException();
+        }
+
+        public async Task<int?> GetUserId(string refreshTokenDto)
+        {
+            var token = await _context.RefreshToken.FirstOrDefaultAsync(u => u.Token == refreshTokenDto);
+            return token?.UserId ;
+        }
+
+        public async Task<bool> VerifyTokenAsync(VerifyRefreshTokenDto refreshTokenDto)
+        {
+            var token = await _context.RefreshToken
+                .FirstOrDefaultAsync(rt =>
+                    rt.Token == refreshTokenDto.token &&
+                    rt.IsValid &&
+                    rt.ExpiresAt > DateTime.UtcNow);
+
+            return token != null;
+        }
+
+    }
+}
Index: iknow-api/Repository/Interface/IRefreshTokenRepository.cs
===================================================================
--- iknow-api/Repository/Interface/IRefreshTokenRepository.cs	(revision 93c368a431f87f49f4df37ae7c04be95baf7f484)
+++ iknow-api/Repository/Interface/IRefreshTokenRepository.cs	(revision 93c368a431f87f49f4df37ae7c04be95baf7f484)
@@ -0,0 +1,12 @@
+using iknow_api.DTOs;
+using iknow_api.Models;
+namespace iknow_api.Repositories{
+    public interface IRefreshTokenRepository
+    {
+        Task AddTokenAsync(RefreshToken refreshToken);
+        Task<bool> VerifyTokenAsync(VerifyRefreshTokenDto refreshTokenDto);
+        Task<bool> DeleteTokenAsync(string refreshTokenDto);
+        Task<int?> GetUserId(string refreshTokenDto);
+        
+    }
+}
Index: iknow-api/Services/Implementations/RefreshTokenService.cs
===================================================================
--- iknow-api/Services/Implementations/RefreshTokenService.cs	(revision 93c368a431f87f49f4df37ae7c04be95baf7f484)
+++ iknow-api/Services/Implementations/RefreshTokenService.cs	(revision 93c368a431f87f49f4df37ae7c04be95baf7f484)
@@ -0,0 +1,50 @@
+using iknow_api.DTOs;
+using iknow_api.Services;
+using System.Security.Cryptography;
+using iknow_api.Models;
+using iknow_api.Models;
+using iknow_api.Repositories;
+
+namespace iknow_api.Services
+{
+    public class RefreshTokenService : IRefreshTokenService
+    {
+        private readonly IRefreshTokenRepository _refreshTokenRepository;
+        public RefreshTokenService(IRefreshTokenRepository refreshTokenRepository)
+        {
+            _refreshTokenRepository = refreshTokenRepository;
+        }
+
+        public async Task<string> GenerateRefreshToken(int userid)
+        {
+            var randomNumber = new byte[32];
+
+            using (var rng = RandomNumberGenerator.Create())
+            {
+                rng.GetBytes(randomNumber);
+            }
+
+            var refreshToken = Convert.ToBase64String(randomNumber);
+
+            RefreshToken refreshTokenModel = new RefreshToken
+            {
+                Token = refreshToken,
+                UserId = userid,
+                ExpiresAt = DateTime.UtcNow.AddMonths(1),
+                IsValid = true
+            };
+
+            await _refreshTokenRepository.AddTokenAsync(refreshTokenModel);
+
+            return refreshToken;
+        }
+
+        public async Task<bool> VerifyRefreshToken(VerifyRefreshTokenDto refreshTokenDto)
+        {
+
+            return await _refreshTokenRepository.VerifyTokenAsync(refreshTokenDto);
+        }
+
+        
+    }
+}
Index: iknow-api/Services/Interfaces/IRefreshTokenService.cs
===================================================================
--- iknow-api/Services/Interfaces/IRefreshTokenService.cs	(revision 93c368a431f87f49f4df37ae7c04be95baf7f484)
+++ iknow-api/Services/Interfaces/IRefreshTokenService.cs	(revision 93c368a431f87f49f4df37ae7c04be95baf7f484)
@@ -0,0 +1,10 @@
+using iknow_api.DTOs;
+
+namespace iknow_api.Services
+{
+    public interface IRefreshTokenService
+    {
+        Task<bool> VerifyRefreshToken(VerifyRefreshTokenDto refreshTokenDto);
+        Task<string> GenerateRefreshToken(int userid);
+    }
+}
Index: iknow-api/iknow-api.csproj
===================================================================
--- iknow-api/iknow-api.csproj	(revision dced4799f2687599a13ca1283cad71a6864b15af)
+++ iknow-api/iknow-api.csproj	(revision 93c368a431f87f49f4df37ae7c04be95baf7f484)
@@ -9,5 +9,13 @@
 
   <ItemGroup>
+    <PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
+    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="9.0.10" />
     <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.9" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.10">
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+      <PrivateAssets>all</PrivateAssets>
+    </PackageReference>
+    <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
+    <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.14.0" />
   </ItemGroup>
 
