Index: .gitignore
===================================================================
--- .gitignore	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ .gitignore	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
Index: .mvn/wrapper/maven-wrapper.properties
===================================================================
--- .mvn/wrapper/maven-wrapper.properties	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ .mvn/wrapper/maven-wrapper.properties	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.5/apache-maven-3.9.5-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
Index: snGo_2025/.idea/.idea.BusnGo_2025/.idea/.gitignore
===================================================================
--- BusnGo_2025/.idea/.idea.BusnGo_2025/.idea/.gitignore	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,13 +1,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Rider ignored files
-/projectSettingsUpdater.xml
-/.idea.BusnGo_2025.iml
-/modules.xml
-/contentModel.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
Index: snGo_2025/.idea/.idea.BusnGo_2025/.idea/encodings.xml
===================================================================
--- BusnGo_2025/.idea/.idea.BusnGo_2025/.idea/encodings.xml	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,4 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
-</project>
Index: snGo_2025/.idea/.idea.BusnGo_2025/.idea/indexLayout.xml
===================================================================
--- BusnGo_2025/.idea/.idea.BusnGo_2025/.idea/indexLayout.xml	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,8 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="UserContentModel">
-    <attachedFolders />
-    <explicitIncludes />
-    <explicitExcludes />
-  </component>
-</project>
Index: snGo_2025/BusnGo_2025.sln
===================================================================
--- BusnGo_2025/BusnGo_2025.sln	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,16 +1,0 @@
-﻿
-Microsoft Visual Studio Solution File, Format Version 12.00
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BusnGo_2025", "BusnGo_2025\BusnGo_2025.csproj", "{23670919-507D-427B-A0D7-BBDB8A500BAC}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Release|Any CPU = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{23670919-507D-427B-A0D7-BBDB8A500BAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{23670919-507D-427B-A0D7-BBDB8A500BAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{23670919-507D-427B-A0D7-BBDB8A500BAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{23670919-507D-427B-A0D7-BBDB8A500BAC}.Release|Any CPU.Build.0 = Release|Any CPU
-	EndGlobalSection
-EndGlobal
Index: snGo_2025/BusnGo_2025/BusnGo_2025.csproj
===================================================================
--- BusnGo_2025/BusnGo_2025/BusnGo_2025.csproj	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,14 +1,0 @@
-﻿<Project Sdk="Microsoft.NET.Sdk">
-
-    <PropertyGroup>
-        <OutputType>Exe</OutputType>
-        <TargetFramework>net8.0</TargetFramework>
-        <ImplicitUsings>enable</ImplicitUsings>
-        <Nullable>enable</Nullable>
-    </PropertyGroup>
-
-    <ItemGroup>
-      <PackageReference Include="Npgsql" Version="9.0.3" />
-    </ItemGroup>
-
-</Project>
Index: snGo_2025/BusnGo_2025/Program.cs
===================================================================
--- BusnGo_2025/BusnGo_2025/Program.cs	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,478 +1,0 @@
-﻿using Npgsql;
-using NpgsqlTypes;
-
-class BusnGo
-{
-    // Connection string with schema set to project_v3
-    static string connStr = "Host=localhost;Port=9999;Database=db_202425z_va_prj_busngo;Username=db_202425z_va_prj_busngo_owner;Password=cb67b5e4a198";
-
-    // Class to store session information
-    class UserSession
-    {
-        public long UserId { get; set; }
-        public string Role { get; set; } // "patnik", "vozac", "konduktor", or "admin"
-        public bool IsAdmin { get; set; }
-    }
-
-    static void Main()
-    {
-        using var conn = new NpgsqlConnection(connStr);
-        try
-        {
-            conn.Open();
-            // Set schema search path to project_v3
-            using (var cmd = new NpgsqlCommand("SET search_path TO project_v3, public", conn))
-            {
-                cmd.ExecuteNonQuery();
-            }
-        }
-        catch (PostgresException ex)
-        {
-            Console.WriteLine($"Connection error: {ex.Message}, SQLState: {ex.SqlState}, Detail: {ex.Detail}");
-            return;
-        }
-
-        // Start as admin by default for testing
-        var session = new UserSession
-        {
-            UserId = 0, // Default admin ID (not tied to a specific user)
-            Role = "admin",
-            IsAdmin = true
-        };
-        Console.WriteLine("Started as Admin for testing.");
-
-        // Main menu loop
-        while (true)
-        {
-            DisplayMenu(session);
-            Console.Write("Choose: ");
-            var choice = Console.ReadLine();
-
-            switch (choice)
-            {
-                case "1" when session.Role == "patnik" || session.IsAdmin:
-                    BuyTicket(conn);
-                    break;
-                case "2" when session.Role == "patnik" || session.IsAdmin:
-                    StartRide(conn);
-                    break;
-                case "3" when session.Role == "vozac" || session.IsAdmin:
-                    StartBusRoute(conn);
-                    break;
-                case "4" when session.Role == "konduktor" || session.IsAdmin:
-                    DoControl(conn);
-                    break;
-                case "5" when session.Role == "konduktor" || session.IsAdmin:
-                    WriteFine(conn);
-                    break;
-                case "6" when session.IsAdmin:
-                    RegisterPassenger(conn);
-                    break;
-                case "7" when session.IsAdmin:
-                    RegisterWorker(conn, "vozac");
-                    break;
-                case "8" when session.IsAdmin:
-                    RegisterWorker(conn, "konduktor");
-                    break;
-                case "9" when session.IsAdmin:
-                    ShowView(conn);
-                    break;
-                case "10": // Login as another user
-                    var newSession = Login(conn);
-                    session = newSession ?? session; // Revert to admin if login fails
-                    if (newSession != null)
-                        Console.WriteLine($"Logged in as {session.Role}{(session.IsAdmin ? " (Admin)" : "")}.");
-                    else
-                        Console.WriteLine("Login failed, continuing as Admin.");
-                    break;
-                case "0":
-                    return;
-                default:
-                    Console.WriteLine("Invalid choice or unauthorized action.");
-                    break;
-            }
-        }
-    }
-
-    // Login function (optional for testing)
-    static UserSession Login(NpgsqlConnection conn)
-    {
-        Console.Write("Email: ");
-        var email = Console.ReadLine();
-        Console.Write("Password: ");
-        var password = Console.ReadLine();
-
-        using var cmd = new NpgsqlCommand(
-            @"SELECT k.k_id, k.k_is_admin, 
-                     CASE 
-                         WHEN p.k_id IS NOT NULL THEN 'patnik'
-                         WHEN v.k_id IS NOT NULL THEN 'vozac'
-                         WHEN knd.k_id IS NOT NULL THEN 'konduktor'
-                         ELSE 'unknown'
-                     END AS role
-              FROM Korisnik k
-              LEFT JOIN Patnik p ON k.k_id = p.k_id
-              LEFT JOIN Vraboten v ON k.k_id = v.k_id
-              LEFT JOIN Vozac vz ON v.k_id = vz.k_id
-              LEFT JOIN Konduktor knd ON v.k_id = knd.k_id
-              WHERE k.k_email = @email AND k.k_lozinka = @password", conn);
-        cmd.Parameters.AddWithValue("email", NpgsqlDbType.Varchar, email);
-        cmd.Parameters.AddWithValue("password", NpgsqlDbType.Varchar, password);
-
-        try
-        {
-            using var reader = cmd.ExecuteReader();
-            if (reader.Read())
-            {
-                var session = new UserSession
-                {
-                    UserId = reader.GetInt64(0),
-                    IsAdmin = reader.GetBoolean(1),
-                    Role = reader.GetString(2)
-                };
-                if (session.IsAdmin)
-                    session.Role = "admin"; // Override role for admins
-                return session;
-            }
-            else
-            {
-                Console.WriteLine("Invalid email or password.");
-                return null;
-            }
-        }
-        catch (PostgresException ex)
-        {
-            Console.WriteLine($"Login error: {ex.Message}, SQLState: {ex.SqlState}, Detail: {ex.Detail}");
-            return null;
-        }
-    }
-
-    // Display role-based menu
-    static void DisplayMenu(UserSession session)
-    {
-        Console.WriteLine($"\nMenu (Logged in as {session.Role}{(session.IsAdmin ? " (Admin)" : "")}):");
-        if (session.Role == "patnik" || session.IsAdmin)
-        {
-            Console.WriteLine("1. Buy Ticket");
-            Console.WriteLine("2. Start Ride");
-        }
-        if (session.Role == "vozac" || session.IsAdmin)
-        {
-            Console.WriteLine("3. Start Bus Route");
-        }
-        if (session.Role == "konduktor" || session.IsAdmin)
-        {
-            Console.WriteLine("4. Do Control");
-            Console.WriteLine("5. Write Fine");
-        }
-        if (session.IsAdmin)
-        {
-            Console.WriteLine("6. Register Passenger");
-            Console.WriteLine("7. Register Driver");
-            Console.WriteLine("8. Register Conductor");
-            Console.WriteLine("9. Show Analytics View");
-        }
-        Console.WriteLine("10. Login as another user");
-        Console.WriteLine("0. Exit");
-    }
-
-    // Helper to list rows then prompt for numeric ID
-    static long PromptWithList(NpgsqlConnection conn, string sql, string idField, string displayField, string prompt)
-    {
-        using (var cmd = new NpgsqlCommand(sql, conn))
-        using (var reader = cmd.ExecuteReader())
-        {
-            while (reader.Read())
-                Console.WriteLine($"{reader[idField]} - {reader[displayField]}");
-        }
-        Console.Write(prompt);
-        return long.Parse(Console.ReadLine());
-    }
-
-    // Helper to list rows then prompt for string ID
-    static string PromptWithListString(NpgsqlConnection conn, string sql, string idField, string displayField, string prompt)
-    {
-        using (var cmd = new NpgsqlCommand(sql, conn))
-        using (var reader = cmd.ExecuteReader())
-        {
-            while (reader.Read())
-                Console.WriteLine($"{reader[idField]} - {reader[displayField]}");
-        }
-        Console.Write(prompt);
-        return Console.ReadLine();
-    }
-
-    // ---------------- Passenger Registration ----------------
-    static void RegisterPassenger(NpgsqlConnection conn)
-    {
-        Console.Write("Ime: "); var ime = Console.ReadLine();
-        Console.Write("Adresa: "); var adresa = Console.ReadLine();
-        Console.Write("Telefon: "); var tel = Console.ReadLine();
-        Console.Write("Email: "); var email = Console.ReadLine();
-        Console.Write("EMBG (13 digits): "); var embg = Console.ReadLine();
-        Console.Write("Lozinka: "); var pass = Console.ReadLine();
-
-        using var cmd = new NpgsqlCommand(
-            "CALL registracija_korisnik(@ime, @adr, @tel, @em, @embg, @pass, @isAdmin, @uloga, @plata, @datum, @datumPrekin)", conn);
-        cmd.Parameters.AddWithValue("ime", NpgsqlDbType.Varchar, ime);
-        cmd.Parameters.AddWithValue("adr", NpgsqlDbType.Varchar, adresa);
-        cmd.Parameters.AddWithValue("tel", NpgsqlDbType.Varchar, tel);
-        cmd.Parameters.AddWithValue("em", NpgsqlDbType.Varchar, email);
-        cmd.Parameters.AddWithValue("embg", NpgsqlDbType.Char, embg);
-        cmd.Parameters.AddWithValue("pass", NpgsqlDbType.Varchar, pass);
-        cmd.Parameters.AddWithValue("isAdmin", NpgsqlDbType.Boolean, false);
-        cmd.Parameters.AddWithValue("uloga", NpgsqlDbType.Varchar, "patnik");
-        cmd.Parameters.AddWithValue("plata", NpgsqlDbType.Numeric, DBNull.Value);
-        cmd.Parameters.AddWithValue("datum", NpgsqlDbType.Date, DBNull.Value);
-        cmd.Parameters.AddWithValue("datumPrekin", NpgsqlDbType.Date, DBNull.Value);
-
-        try
-        {
-            cmd.ExecuteNonQuery();
-            Console.WriteLine("Passenger registered successfully.");
-        }
-        catch (PostgresException ex)
-        {
-            Console.WriteLine($"Error registering passenger: {ex.Message}, SQLState: {ex.SqlState}, Detail: {ex.Detail}");
-        }
-    }
-
-    // ---------------- Worker Registration (Driver/Conductor) ----------------
-    static void RegisterWorker(NpgsqlConnection conn, string role)
-    {
-        Console.Write("Ime: "); var ime = Console.ReadLine();
-        Console.Write("Adresa: "); var adresa = Console.ReadLine();
-        Console.Write("Telefon: "); var tel = Console.ReadLine();
-        Console.Write("Email: "); var email = Console.ReadLine();
-        Console.Write("EMBG (13 digits): "); var embg = Console.ReadLine();
-        Console.Write("Lozinka: "); var pass = Console.ReadLine();
-        Console.Write("Plata: "); var plata = decimal.Parse(Console.ReadLine());
-        Console.Write("Datum vrabotuvanje (yyyy-mm-dd): "); var datum = DateTime.Parse(Console.ReadLine());
-
-        using var cmd = new NpgsqlCommand(
-            "CALL registracija_korisnik(@ime, @adr, @tel, @em, @embg, @pass, @isAdmin, @uloga, @plata, @datum, @datumPrekin)", conn);
-        cmd.Parameters.AddWithValue("ime", NpgsqlDbType.Varchar, ime);
-        cmd.Parameters.AddWithValue("adr", NpgsqlDbType.Varchar, adresa);
-        cmd.Parameters.AddWithValue("tel", NpgsqlDbType.Varchar, tel);
-        cmd.Parameters.AddWithValue("em", NpgsqlDbType.Varchar, email);
-        cmd.Parameters.AddWithValue("embg", NpgsqlDbType.Char, embg);
-        cmd.Parameters.AddWithValue("pass", NpgsqlDbType.Varchar, pass);
-        cmd.Parameters.AddWithValue("isAdmin", NpgsqlDbType.Boolean, false);
-        cmd.Parameters.AddWithValue("uloga", NpgsqlDbType.Varchar, role);
-        cmd.Parameters.AddWithValue("plata", NpgsqlDbType.Numeric, plata);
-        cmd.Parameters.AddWithValue("datum", NpgsqlDbType.Date, datum.Date);
-        cmd.Parameters.AddWithValue("datumPrekin", NpgsqlDbType.Date, DBNull.Value);
-
-        try
-        {
-            cmd.ExecuteNonQuery();
-            Console.WriteLine($"Registered {role} successfully.");
-        }
-        catch (PostgresException ex)
-        {
-            Console.WriteLine($"Error registering {role}: {ex.Message}, SQLState: {ex.SqlState}, Detail: {ex.Detail}");
-        }
-    }
-
-    // ---------------- Ticket ----------------
-    static void BuyTicket(NpgsqlConnection conn)
-    {
-        var tbId = PromptWithList(conn, "SELECT tb_id,tb_ime FROM TipBilet", "tb_id", "tb_ime", "Choose ticket type ID: ");
-        var patnikId = PromptWithList(conn, "SELECT k_id,k_ime FROM Korisnik JOIN Patnik USING(k_id)", "k_id", "k_ime", "Choose passenger k_id: ");
-
-        var sql = @"INSERT INTO Bilet(b_datum_na_kupuvnje,patnik_k_id,tb_id,b_status)
-                    VALUES(now(),@p,@t,'inactive') RETURNING b_id";
-        using var cmd = new NpgsqlCommand(sql, conn);
-        cmd.Parameters.AddWithValue("p", NpgsqlDbType.Bigint, patnikId);
-        cmd.Parameters.AddWithValue("t", NpgsqlDbType.Integer, tbId);
-        try
-        {
-            var bid = cmd.ExecuteScalar();
-            Console.WriteLine($"Created ticket b_id: {bid}");
-        }
-        catch (PostgresException ex)
-        {
-            Console.WriteLine($"Error buying ticket: {ex.Message}, SQLState: {ex.SqlState}, Detail: {ex.Detail}");
-        }
-    }
-
-    // ---------------- Ride ----------------
-    static void StartRide(NpgsqlConnection conn)
-    {
-        var inlId = PromptWithList(conn, "SELECT inl_id,li_id FROM InstancaNaLinija WHERE inl_datum_end IS NULL", "inl_id", "li_id", "Choose InstancaNaLinija ID: ");
-        var patnikId = PromptWithList(conn, "SELECT k_id,k_ime FROM Korisnik JOIN Patnik USING(k_id)", "k_id", "k_ime", "Choose passenger k_id: ");
-        var pnlId = PromptWithList(conn, "SELECT pnl_id,p_ime FROM PostojkaNaLinija JOIN Postojka USING(p_id)", "pnl_id", "p_ime", "Choose stop pnl_id: ");
-        var bId = PromptWithList(conn, "SELECT b_id,b_status FROM Bilet WHERE patnik_k_id=" + patnikId, "b_id", "b_status", "Choose active ticket b_id: ");
-
-        var sql = @"INSERT INTO Vozenje(vozenje_start,patnik_k_id,pnl_id,inl_id,vozenje_status,b_id)
-                    VALUES(now(),@p,@pnl,@inl,'active',@b) RETURNING vozenje_id";
-        using var cmd = new NpgsqlCommand(sql, conn);
-        cmd.Parameters.AddWithValue("p", NpgsqlDbType.Bigint, patnikId);
-        cmd.Parameters.AddWithValue("pnl", NpgsqlDbType.Integer, pnlId);
-        cmd.Parameters.AddWithValue("inl", NpgsqlDbType.Integer, inlId);
-        cmd.Parameters.AddWithValue("b", NpgsqlDbType.Bigint, bId);
-        try
-        {
-            var vid = cmd.ExecuteScalar();
-            Console.WriteLine($"Started ride vozenje_id: {vid}");
-        }
-        catch (PostgresException ex)
-        {
-            Console.WriteLine($"Error starting ride: {ex.Message}, SQLState: {ex.SqlState}, Detail: {ex.Detail}");
-        }
-    }
-
-    // ---------------- Control ----------------
-    static void DoControl(NpgsqlConnection conn)
-    {
-        var konduktorId = PromptWithList(conn, "SELECT k_id,k_ime FROM Korisnik JOIN Konduktor USING(k_id)", "k_id", "k_ime", "Choose konduktor k_id: ");
-        var inlId = PromptWithList(conn, "SELECT inl_id,li_id FROM InstancaNaLinija WHERE inl_datum_end IS NULL", "inl_id", "li_id", "Choose InstancaNaLinija ID: ");
-
-        var sql = @"INSERT INTO Kontroli(kontrola_datum,konduktor_k_id,inl_id)
-                    VALUES(now(),@k,@inl) RETURNING kontrola_id";
-        using var cmd = new NpgsqlCommand(sql, conn);
-        cmd.Parameters.AddWithValue("k", NpgsqlDbType.Bigint, konduktorId);
-        cmd.Parameters.AddWithValue("inl", NpgsqlDbType.Integer, inlId);
-        try
-        {
-            var kid = cmd.ExecuteScalar();
-            Console.WriteLine($"Control recorded kontrola_id: {kid}");
-        }
-        catch (PostgresException ex)
-        {
-            Console.WriteLine($"Error recording control: {ex.Message}, SQLState: {ex.SqlState}, Detail: {ex.Detail}");
-        }
-    }
-
-    // ---------------- Fine ----------------
-    static void WriteFine(NpgsqlConnection conn)
-{
-    var konduktorId = PromptWithList(conn, "SELECT k_id,k_ime FROM Korisnik JOIN Konduktor USING(k_id)", "k_id", "k_ime", "Choose konduktor k_id: ");
-    var kontrolaId = PromptWithList(conn, "SELECT kontrola_id,kontrola_datum FROM Kontroli", "kontrola_id", "kontrola_datum", "Choose kontrola_id: ");
-    Console.Write("Iznos: "); var iznos = decimal.Parse(Console.ReadLine());
-    Console.Write("Dokument: "); var dok = Console.ReadLine();
-
-    Console.Write("Is the passenger registered? (y/n): ");
-    var reg = Console.ReadLine();
-    if (reg?.ToLower() == "y")
-    {
-        var patnikId = PromptWithList(conn, "SELECT k_id,k_ime FROM Korisnik JOIN Patnik USING(k_id)", "k_id", "k_ime", "Choose passenger k_id: ");
-        using var cmd2 = new NpgsqlCommand(
-            "CALL zapisi_kazna(@iznos, @plateno, CURRENT_DATE, @dok, @kon, @kont, 'registriran', null, @p, null, null, null)", conn);
-        cmd2.Parameters.AddWithValue("iznos", NpgsqlDbType.Numeric, iznos);
-        cmd2.Parameters.AddWithValue("plateno", NpgsqlDbType.Boolean, true);
-        cmd2.Parameters.AddWithValue("dok", NpgsqlDbType.Varchar, dok);
-        cmd2.Parameters.AddWithValue("kon", NpgsqlDbType.Bigint, konduktorId);
-        cmd2.Parameters.AddWithValue("kont", NpgsqlDbType.Integer, kontrolaId);
-        cmd2.Parameters.AddWithValue("p", NpgsqlDbType.Bigint, patnikId);
-        try
-        {
-            cmd2.ExecuteNonQuery();
-            Console.WriteLine("Fine recorded successfully for registered passenger.");
-        }
-        catch (PostgresException ex)
-        {
-            Console.WriteLine($"Error recording fine: {ex.Message}, SQLState: {ex.SqlState}, Detail: {ex.Detail}");
-        }
-    }
-    else
-    {
-        Console.Write("Ime: "); var ime = Console.ReadLine();
-        Console.Write("Adresa: "); var adr = Console.ReadLine();
-        Console.Write("Telefon: "); var tel = Console.ReadLine();
-        using var cmd2 = new NpgsqlCommand(
-            "CALL zapisi_kazna(@iznos, @plateno, CURRENT_DATE, @dok, @kon, @kont, 'neregistriran', null, null, @tel, @ime, @adr)", conn);
-        cmd2.Parameters.AddWithValue("iznos", NpgsqlDbType.Numeric, iznos);
-        cmd2.Parameters.AddWithValue("plateno", NpgsqlDbType.Boolean, true);
-        cmd2.Parameters.AddWithValue("dok", NpgsqlDbType.Varchar, dok);
-        cmd2.Parameters.AddWithValue("kon", NpgsqlDbType.Bigint, konduktorId);
-        cmd2.Parameters.AddWithValue("kont", NpgsqlDbType.Integer, kontrolaId);
-        cmd2.Parameters.AddWithValue("tel", NpgsqlDbType.Varchar, tel);
-        cmd2.Parameters.AddWithValue("ime", NpgsqlDbType.Varchar, ime);
-        cmd2.Parameters.AddWithValue("adr", NpgsqlDbType.Varchar, adr);
-        try
-        {
-            cmd2.ExecuteNonQuery();
-            Console.WriteLine("Fine recorded successfully for unregistered passenger.");
-        }
-        catch (PostgresException ex)
-        {
-            Console.WriteLine($"Error recording fine: {ex.Message}, SQLState: {ex.SqlState}, Detail: {ex.Detail}");
-        }
-    }
-}
-
-    // ---------------- Bus Route ----------------
-    static void StartBusRoute(NpgsqlConnection conn)
-    {
-        var linijaId = PromptWithList(conn, "SELECT li_id,li_ime FROM Linija", "li_id", "li_ime", "Choose Linija ID: ");
-        var avtobusReg = PromptWithListString(conn, "SELECT a_registracija,a_seriski_broj FROM Avtobus", "a_registracija", "a_seriski_broj", "Choose Avtobus a_registracija: ");
-        var vozacId = PromptWithList(conn, "SELECT k_id,k_ime FROM Korisnik JOIN Vozac USING(k_id)", "k_id", "k_ime", "Choose Vozac k_id: ");
-
-        var sql = @"INSERT INTO InstancaNaLinija(inl_datum_start,vozac_k_id,a_registracija,li_id)
-                    VALUES(now(),@v,@a,@l) RETURNING inl_id";
-        using var cmd = new NpgsqlCommand(sql, conn);
-        cmd.Parameters.AddWithValue("v", NpgsqlDbType.Bigint, vozacId);
-        cmd.Parameters.AddWithValue("a", NpgsqlDbType.Varchar, avtobusReg);
-        cmd.Parameters.AddWithValue("l", NpgsqlDbType.Integer, linijaId);
-        try
-        {
-            var inlid = cmd.ExecuteScalar();
-            Console.WriteLine($"Started InstancaNaLinija inl_id: {inlid}");
-        }
-        catch (PostgresException ex)
-        {
-            Console.WriteLine($"Error starting bus route: {ex.Message}, SQLState: {ex.SqlState}, Detail: {ex.Detail}");
-        }
-    }
-
-    // ---------------- Analytics ----------------
-    static void ShowView(NpgsqlConnection conn)
-    {
-        var views = new List<string>();
-        using (var cmd = new NpgsqlCommand("SELECT matviewname FROM pg_matviews WHERE schemaname = 'project_v3' ORDER BY matviewname", conn))
-        using (var reader = cmd.ExecuteReader())
-        {
-            while (reader.Read())
-                views.Add(reader.GetString(0));
-        }
-
-        if (views.Count == 0)
-        {
-            Console.WriteLine("No materialized views found in the project_v3 schema.");
-            return;
-        }
-
-        Console.WriteLine("Available materialized views:");
-        for (int i = 0; i < views.Count; i++)
-            Console.WriteLine($"{i + 1}. {views[i]}");
-
-        Console.Write("Choose a view by number: ");
-        if (!int.TryParse(Console.ReadLine(), out int choice) || choice < 1 || choice > views.Count)
-        {
-            Console.WriteLine("Invalid choice.");
-            return;
-        }
-
-        var viewName = views[choice - 1];
-
-        try
-        {
-            using var cmdView = new NpgsqlCommand($"SELECT * FROM {viewName}", conn);
-            using var reader = cmdView.ExecuteReader();
-            var cols = reader.GetColumnSchema();
-
-            Console.WriteLine($"\nContents of '{viewName}':");
-            while (reader.Read())
-            {
-                for (int i = 0; i < cols.Count; i++)
-                    Console.Write($"{cols[i].ColumnName}: {reader.GetValue(i)} ");
-                Console.WriteLine();
-            }
-        }
-        catch (PostgresException ex)
-        {
-            Console.WriteLine($"Error showing view '{viewName}': {ex.Message}, SQLState: {ex.SqlState}, Detail: {ex.Detail}");
-        }
-    }
-}
Index: snGo_2025/BusnGo_2025/obj/BusnGo_2025.csproj.nuget.dgspec.json
===================================================================
--- BusnGo_2025/BusnGo_2025/obj/BusnGo_2025.csproj.nuget.dgspec.json	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,72 +1,0 @@
-{
-  "format": 1,
-  "restore": {
-    "C:\\Users\\Darko\\RiderProjects\\BusNGo\\BusnGo_2025\\BusnGo_2025\\BusnGo_2025.csproj": {}
-  },
-  "projects": {
-    "C:\\Users\\Darko\\RiderProjects\\BusNGo\\BusnGo_2025\\BusnGo_2025\\BusnGo_2025.csproj": {
-      "version": "1.0.0",
-      "restore": {
-        "projectUniqueName": "C:\\Users\\Darko\\RiderProjects\\BusNGo\\BusnGo_2025\\BusnGo_2025\\BusnGo_2025.csproj",
-        "projectName": "BusnGo_2025",
-        "projectPath": "C:\\Users\\Darko\\RiderProjects\\BusNGo\\BusnGo_2025\\BusnGo_2025\\BusnGo_2025.csproj",
-        "packagesPath": "C:\\Users\\Darko\\.nuget\\packages\\",
-        "outputPath": "C:\\Users\\Darko\\RiderProjects\\BusNGo\\BusnGo_2025\\BusnGo_2025\\obj\\",
-        "projectStyle": "PackageReference",
-        "configFilePaths": [
-          "C:\\Users\\Darko\\AppData\\Roaming\\NuGet\\NuGet.Config"
-        ],
-        "originalTargetFrameworks": [
-          "net8.0"
-        ],
-        "sources": {
-          "https://api.nuget.org/v3/index.json": {}
-        },
-        "frameworks": {
-          "net8.0": {
-            "targetAlias": "net8.0",
-            "projectReferences": {}
-          }
-        },
-        "warningProperties": {
-          "warnAsError": [
-            "NU1605"
-          ]
-        },
-        "restoreAuditProperties": {
-          "enableAudit": "true",
-          "auditLevel": "low",
-          "auditMode": "direct"
-        }
-      },
-      "frameworks": {
-        "net8.0": {
-          "targetAlias": "net8.0",
-          "dependencies": {
-            "Npgsql": {
-              "target": "Package",
-              "version": "[9.0.3, )"
-            }
-          },
-          "imports": [
-            "net461",
-            "net462",
-            "net47",
-            "net471",
-            "net472",
-            "net48",
-            "net481"
-          ],
-          "assetTargetFallback": true,
-          "warn": true,
-          "frameworkReferences": {
-            "Microsoft.NETCore.App": {
-              "privateAssets": "all"
-            }
-          },
-          "runtimeIdentifierGraphPath": "C:\\Users\\Darko\\.dotnet\\sdk\\8.0.413/PortableRuntimeIdentifierGraph.json"
-        }
-      }
-    }
-  }
-}
Index: snGo_2025/BusnGo_2025/obj/BusnGo_2025.csproj.nuget.g.props
===================================================================
--- BusnGo_2025/BusnGo_2025/obj/BusnGo_2025.csproj.nuget.g.props	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,15 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
-    <RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
-    <RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
-    <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
-    <NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
-    <NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Darko\.nuget\packages\</NuGetPackageFolders>
-    <NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
-    <NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.14.0</NuGetToolVersion>
-  </PropertyGroup>
-  <ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
-    <SourceRoot Include="C:\Users\Darko\.nuget\packages\" />
-  </ItemGroup>
-</Project>
Index: snGo_2025/BusnGo_2025/obj/BusnGo_2025.csproj.nuget.g.targets
===================================================================
--- BusnGo_2025/BusnGo_2025/obj/BusnGo_2025.csproj.nuget.g.targets	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,6 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
-    <Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.2\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.2\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
-  </ImportGroup>
-</Project>
Index: snGo_2025/BusnGo_2025/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
===================================================================
--- BusnGo_2025/BusnGo_2025/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,4 +1,0 @@
-// <autogenerated />
-using System;
-using System.Reflection;
-[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
Index: snGo_2025/BusnGo_2025/obj/Debug/net8.0/BusnGo_2025.AssemblyInfo.cs
===================================================================
--- BusnGo_2025/BusnGo_2025/obj/Debug/net8.0/BusnGo_2025.AssemblyInfo.cs	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,22 +1,0 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-using System;
-using System.Reflection;
-
-[assembly: System.Reflection.AssemblyCompanyAttribute("BusnGo_2025")]
-[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
-[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
-[assembly: System.Reflection.AssemblyProductAttribute("BusnGo_2025")]
-[assembly: System.Reflection.AssemblyTitleAttribute("BusnGo_2025")]
-[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
-
-// Generated by the MSBuild WriteCodeFragment class.
-
Index: snGo_2025/BusnGo_2025/obj/Debug/net8.0/BusnGo_2025.AssemblyInfoInputs.cache
===================================================================
--- BusnGo_2025/BusnGo_2025/obj/Debug/net8.0/BusnGo_2025.AssemblyInfoInputs.cache	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,1 +1,0 @@
-80a4a4b90eaf8da9b502c1eeb335b57684c264936f17a54fdbf104d4eb4d7e73
Index: snGo_2025/BusnGo_2025/obj/Debug/net8.0/BusnGo_2025.GeneratedMSBuildEditorConfig.editorconfig
===================================================================
--- BusnGo_2025/BusnGo_2025/obj/Debug/net8.0/BusnGo_2025.GeneratedMSBuildEditorConfig.editorconfig	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,13 +1,0 @@
-is_global = true
-build_property.TargetFramework = net8.0
-build_property.TargetPlatformMinVersion = 
-build_property.UsingMicrosoftNETSdkWeb = 
-build_property.ProjectTypeGuids = 
-build_property.InvariantGlobalization = 
-build_property.PlatformNeutralAssembly = 
-build_property.EnforceExtendedAnalyzerRules = 
-build_property._SupportedPlatformList = Linux,macOS,Windows
-build_property.RootNamespace = BusnGo_2025
-build_property.ProjectDir = C:\Users\Darko\RiderProjects\BusNGo\BusnGo_2025\BusnGo_2025\
-build_property.EnableComHosting = 
-build_property.EnableGeneratedComInterfaceComImportInterop = 
Index: snGo_2025/BusnGo_2025/obj/Debug/net8.0/BusnGo_2025.GlobalUsings.g.cs
===================================================================
--- BusnGo_2025/BusnGo_2025/obj/Debug/net8.0/BusnGo_2025.GlobalUsings.g.cs	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,8 +1,0 @@
-// <auto-generated/>
-global using global::System;
-global using global::System.Collections.Generic;
-global using global::System.IO;
-global using global::System.Linq;
-global using global::System.Net.Http;
-global using global::System.Threading;
-global using global::System.Threading.Tasks;
Index: snGo_2025/BusnGo_2025/obj/project.assets.json
===================================================================
--- BusnGo_2025/BusnGo_2025/obj/project.assets.json	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,254 +1,0 @@
-{
-  "version": 3,
-  "targets": {
-    "net8.0": {
-      "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
-        "type": "package",
-        "compile": {
-          "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
-            "related": ".xml"
-          }
-        },
-        "runtime": {
-          "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
-            "related": ".xml"
-          }
-        },
-        "build": {
-          "buildTransitive/net6.0/_._": {}
-        }
-      },
-      "Microsoft.Extensions.Logging.Abstractions/8.0.2": {
-        "type": "package",
-        "dependencies": {
-          "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
-        },
-        "compile": {
-          "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
-            "related": ".xml"
-          }
-        },
-        "runtime": {
-          "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
-            "related": ".xml"
-          }
-        },
-        "build": {
-          "buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets": {}
-        }
-      },
-      "Npgsql/9.0.3": {
-        "type": "package",
-        "dependencies": {
-          "Microsoft.Extensions.Logging.Abstractions": "8.0.2"
-        },
-        "compile": {
-          "lib/net8.0/Npgsql.dll": {
-            "related": ".xml"
-          }
-        },
-        "runtime": {
-          "lib/net8.0/Npgsql.dll": {
-            "related": ".xml"
-          }
-        }
-      }
-    }
-  },
-  "libraries": {
-    "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
-      "sha512": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==",
-      "type": "package",
-      "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2",
-      "files": [
-        ".nupkg.metadata",
-        ".signature.p7s",
-        "Icon.png",
-        "LICENSE.TXT",
-        "PACKAGE.md",
-        "THIRD-PARTY-NOTICES.TXT",
-        "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets",
-        "buildTransitive/net462/_._",
-        "buildTransitive/net6.0/_._",
-        "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets",
-        "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
-        "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
-        "lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
-        "lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
-        "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
-        "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
-        "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
-        "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
-        "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
-        "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
-        "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll",
-        "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml",
-        "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512",
-        "microsoft.extensions.dependencyinjection.abstractions.nuspec",
-        "useSharedDesignerContext.txt"
-      ]
-    },
-    "Microsoft.Extensions.Logging.Abstractions/8.0.2": {
-      "sha512": "nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==",
-      "type": "package",
-      "path": "microsoft.extensions.logging.abstractions/8.0.2",
-      "files": [
-        ".nupkg.metadata",
-        ".signature.p7s",
-        "Icon.png",
-        "LICENSE.TXT",
-        "PACKAGE.md",
-        "THIRD-PARTY-NOTICES.TXT",
-        "analyzers/dotnet/roslyn3.11/cs/Microsoft.Extensions.Logging.Generators.dll",
-        "analyzers/dotnet/roslyn3.11/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn3.11/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn3.11/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn3.11/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn3.11/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn3.11/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn3.11/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn3.11/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn3.11/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn3.11/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn3.11/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn3.11/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn3.11/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.0/cs/Microsoft.Extensions.Logging.Generators.dll",
-        "analyzers/dotnet/roslyn4.0/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.0/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.0/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.0/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.0/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.0/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.0/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.0/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.0/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.0/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.0/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.0/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.0/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll",
-        "analyzers/dotnet/roslyn4.4/cs/cs/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.4/cs/de/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.4/cs/es/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.4/cs/fr/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.4/cs/it/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.4/cs/ja/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.4/cs/ko/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.4/cs/pl/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.4/cs/pt-BR/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.4/cs/ru/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.4/cs/tr/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.4/cs/zh-Hans/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "analyzers/dotnet/roslyn4.4/cs/zh-Hant/Microsoft.Extensions.Logging.Generators.resources.dll",
-        "buildTransitive/net461/Microsoft.Extensions.Logging.Abstractions.targets",
-        "buildTransitive/net462/Microsoft.Extensions.Logging.Abstractions.targets",
-        "buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets",
-        "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Logging.Abstractions.targets",
-        "buildTransitive/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.targets",
-        "lib/net462/Microsoft.Extensions.Logging.Abstractions.dll",
-        "lib/net462/Microsoft.Extensions.Logging.Abstractions.xml",
-        "lib/net6.0/Microsoft.Extensions.Logging.Abstractions.dll",
-        "lib/net6.0/Microsoft.Extensions.Logging.Abstractions.xml",
-        "lib/net7.0/Microsoft.Extensions.Logging.Abstractions.dll",
-        "lib/net7.0/Microsoft.Extensions.Logging.Abstractions.xml",
-        "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll",
-        "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.xml",
-        "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll",
-        "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml",
-        "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512",
-        "microsoft.extensions.logging.abstractions.nuspec",
-        "useSharedDesignerContext.txt"
-      ]
-    },
-    "Npgsql/9.0.3": {
-      "sha512": "tPvY61CxOAWxNsKLEBg+oR646X4Bc8UmyQ/tJszL/7mEmIXQnnBhVJZrZEEUv0Bstu0mEsHZD5At3EO8zQRAYw==",
-      "type": "package",
-      "path": "npgsql/9.0.3",
-      "files": [
-        ".nupkg.metadata",
-        ".signature.p7s",
-        "README.md",
-        "lib/net6.0/Npgsql.dll",
-        "lib/net6.0/Npgsql.xml",
-        "lib/net8.0/Npgsql.dll",
-        "lib/net8.0/Npgsql.xml",
-        "npgsql.9.0.3.nupkg.sha512",
-        "npgsql.nuspec",
-        "postgresql.png"
-      ]
-    }
-  },
-  "projectFileDependencyGroups": {
-    "net8.0": [
-      "Npgsql >= 9.0.3"
-    ]
-  },
-  "packageFolders": {
-    "C:\\Users\\Darko\\.nuget\\packages\\": {}
-  },
-  "project": {
-    "version": "1.0.0",
-    "restore": {
-      "projectUniqueName": "C:\\Users\\Darko\\RiderProjects\\BusNGo\\BusnGo_2025\\BusnGo_2025\\BusnGo_2025.csproj",
-      "projectName": "BusnGo_2025",
-      "projectPath": "C:\\Users\\Darko\\RiderProjects\\BusNGo\\BusnGo_2025\\BusnGo_2025\\BusnGo_2025.csproj",
-      "packagesPath": "C:\\Users\\Darko\\.nuget\\packages\\",
-      "outputPath": "C:\\Users\\Darko\\RiderProjects\\BusNGo\\BusnGo_2025\\BusnGo_2025\\obj\\",
-      "projectStyle": "PackageReference",
-      "configFilePaths": [
-        "C:\\Users\\Darko\\AppData\\Roaming\\NuGet\\NuGet.Config"
-      ],
-      "originalTargetFrameworks": [
-        "net8.0"
-      ],
-      "sources": {
-        "https://api.nuget.org/v3/index.json": {}
-      },
-      "frameworks": {
-        "net8.0": {
-          "targetAlias": "net8.0",
-          "projectReferences": {}
-        }
-      },
-      "warningProperties": {
-        "warnAsError": [
-          "NU1605"
-        ]
-      },
-      "restoreAuditProperties": {
-        "enableAudit": "true",
-        "auditLevel": "low",
-        "auditMode": "direct"
-      }
-    },
-    "frameworks": {
-      "net8.0": {
-        "targetAlias": "net8.0",
-        "dependencies": {
-          "Npgsql": {
-            "target": "Package",
-            "version": "[9.0.3, )"
-          }
-        },
-        "imports": [
-          "net461",
-          "net462",
-          "net47",
-          "net471",
-          "net472",
-          "net48",
-          "net481"
-        ],
-        "assetTargetFallback": true,
-        "warn": true,
-        "frameworkReferences": {
-          "Microsoft.NETCore.App": {
-            "privateAssets": "all"
-          }
-        },
-        "runtimeIdentifierGraphPath": "C:\\Users\\Darko\\.dotnet\\sdk\\8.0.413/PortableRuntimeIdentifierGraph.json"
-      }
-    }
-  }
-}
Index: snGo_2025/BusnGo_2025/obj/project.nuget.cache
===================================================================
--- BusnGo_2025/BusnGo_2025/obj/project.nuget.cache	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,12 +1,0 @@
-{
-  "version": 2,
-  "dgSpecHash": "gR22Yy40uYY=",
-  "success": true,
-  "projectFilePath": "C:\\Users\\Darko\\RiderProjects\\BusNGo\\BusnGo_2025\\BusnGo_2025\\BusnGo_2025.csproj",
-  "expectedPackageFiles": [
-    "C:\\Users\\Darko\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\8.0.2\\microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512",
-    "C:\\Users\\Darko\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\8.0.2\\microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512",
-    "C:\\Users\\Darko\\.nuget\\packages\\npgsql\\9.0.3\\npgsql.9.0.3.nupkg.sha512"
-  ],
-  "logs": []
-}
Index: snGo_2025/BusnGo_2025/obj/project.packagespec.json
===================================================================
--- BusnGo_2025/BusnGo_2025/obj/project.packagespec.json	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,1 +1,0 @@
-﻿"restore":{"projectUniqueName":"C:\\Users\\Darko\\RiderProjects\\BusNGo\\BusnGo_2025\\BusnGo_2025\\BusnGo_2025.csproj","projectName":"BusnGo_2025","projectPath":"C:\\Users\\Darko\\RiderProjects\\BusNGo\\BusnGo_2025\\BusnGo_2025\\BusnGo_2025.csproj","outputPath":"C:\\Users\\Darko\\RiderProjects\\BusNGo\\BusnGo_2025\\BusnGo_2025\\obj\\","projectStyle":"PackageReference","originalTargetFrameworks":["net8.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"}}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"Npgsql":{"target":"Package","version":"[9.0.3, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"C:\\Users\\Darko\\.dotnet\\sdk\\8.0.413/PortableRuntimeIdentifierGraph.json"}}
Index: snGo_2025/BusnGo_2025/obj/rider.project.model.nuget.info
===================================================================
--- BusnGo_2025/BusnGo_2025/obj/rider.project.model.nuget.info	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,1 +1,0 @@
-﻿17583245447738005
Index: snGo_2025/BusnGo_2025/obj/rider.project.restore.info
===================================================================
--- BusnGo_2025/BusnGo_2025/obj/rider.project.restore.info	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,1 +1,0 @@
-﻿17583245450613355
Index: snGo_2025/global.json
===================================================================
--- BusnGo_2025/global.json	(revision f363bfd06ac9e7b45e7e89125593b5d9d067bf0f)
+++ 	(revision )
@@ -1,7 +1,0 @@
-{
-  "sdk": {
-    "version": "8.0.0",
-    "rollForward": "latestMinor",
-    "allowPrerelease": false
-  }
-}
Index: mvnw
===================================================================
--- mvnw	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ mvnw	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,308 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Apache Maven Wrapper startup batch script, version 3.2.0
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /usr/local/etc/mavenrc ] ; then
+    . /usr/local/etc/mavenrc
+  fi
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "$(uname)" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
+      else
+        JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=$(java-config --jre-home)
+  fi
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
+    JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="$(which javac)"
+  if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=$(which readlink)
+    if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
+      if $darwin ; then
+        javaHome="$(dirname "\"$javaExecutable\"")"
+        javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac"
+      else
+        javaExecutable="$(readlink -f "\"$javaExecutable\"")"
+      fi
+      javaHome="$(dirname "\"$javaExecutable\"")"
+      javaHome=$(expr "$javaHome" : '\(.*\)/bin')
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=$(cd "$wdir/.." || exit 1; pwd)
+    fi
+    # end of workaround
+  done
+  printf '%s' "$(cd "$basedir" || exit 1; pwd)"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    # Remove \r in case we run on Windows within Git Bash
+    # and check out the repository with auto CRLF management
+    # enabled. Otherwise, we may read lines that are delimited with
+    # \r\n and produce $'-Xarg\r' rather than -Xarg due to word
+    # splitting rules.
+    tr -s '\r\n' ' ' < "$1"
+  fi
+}
+
+log() {
+  if [ "$MVNW_VERBOSE" = true ]; then
+    printf '%s\n' "$1"
+  fi
+}
+
+BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
+log "$MAVEN_PROJECTBASEDIR"
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
+if [ -r "$wrapperJarPath" ]; then
+    log "Found $wrapperJarPath"
+else
+    log "Couldn't find $wrapperJarPath, downloading it ..."
+
+    if [ -n "$MVNW_REPOURL" ]; then
+      wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+    else
+      wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+    fi
+    while IFS="=" read -r key value; do
+      # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
+      safeValue=$(echo "$value" | tr -d '\r')
+      case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
+      esac
+    done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+    log "Downloading from: $wrapperUrl"
+
+    if $cygwin; then
+      wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
+    fi
+
+    if command -v wget > /dev/null; then
+        log "Found wget ... using wget"
+        [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+        else
+            wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+        fi
+    elif command -v curl > /dev/null; then
+        log "Found curl ... using curl"
+        [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
+        else
+            curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
+        fi
+    else
+        log "Falling back to using Java to download"
+        javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
+        # For Cygwin, switch paths to Windows format before running javac
+        if $cygwin; then
+          javaSource=$(cygpath --path --windows "$javaSource")
+          javaClass=$(cygpath --path --windows "$javaClass")
+        fi
+        if [ -e "$javaSource" ]; then
+            if [ ! -e "$javaClass" ]; then
+                log " - Compiling MavenWrapperDownloader.java ..."
+                ("$JAVA_HOME/bin/javac" "$javaSource")
+            fi
+            if [ -e "$javaClass" ]; then
+                log " - Running MavenWrapperDownloader.java ..."
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+# If specified, validate the SHA-256 sum of the Maven wrapper jar file
+wrapperSha256Sum=""
+while IFS="=" read -r key value; do
+  case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
+  esac
+done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+if [ -n "$wrapperSha256Sum" ]; then
+  wrapperSha256Result=false
+  if command -v sha256sum > /dev/null; then
+    if echo "$wrapperSha256Sum  $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
+      wrapperSha256Result=true
+    fi
+  elif command -v shasum > /dev/null; then
+    if echo "$wrapperSha256Sum  $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
+      wrapperSha256Result=true
+    fi
+  else
+    echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
+    echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
+    exit 1
+  fi
+  if [ $wrapperSha256Result = false ]; then
+    echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
+    echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
+    echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
+    exit 1
+  fi
+fi
+
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+# shellcheck disable=SC2086 # safe args
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  $MAVEN_DEBUG_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
Index: mvnw.cmd
===================================================================
--- mvnw.cmd	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ mvnw.cmd	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,205 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Apache Maven Wrapper startup batch script, version 3.2.0
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Found %WRAPPER_JAR%
+    )
+) else (
+    if not "%MVNW_REPOURL%" == "" (
+        SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+    )
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
+        echo Downloading from: %WRAPPER_URL%
+    )
+
+    powershell -Command "&{"^
+		"$webclient = new-object System.Net.WebClient;"^
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+		"}"^
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Finished downloading %WRAPPER_JAR%
+    )
+)
+@REM End of extension
+
+@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
+SET WRAPPER_SHA_256_SUM=""
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
+)
+IF NOT %WRAPPER_SHA_256_SUM%=="" (
+    powershell -Command "&{"^
+       "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
+       "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
+       "  Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
+       "  Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
+       "  Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
+       "  exit 1;"^
+       "}"^
+       "}"
+    if ERRORLEVEL 1 goto error
+)
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% ^
+  %JVM_CONFIG_MAVEN_PROPS% ^
+  %MAVEN_OPTS% ^
+  %MAVEN_DEBUG_OPTS% ^
+  -classpath %WRAPPER_JAR% ^
+  "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
+  %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%"=="on" pause
+
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
+
+cmd /C exit /B %ERROR_CODE%
Index: pom.xml
===================================================================
--- pom.xml	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ pom.xml	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>3.2.1</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>mk.ukim.finki</groupId>
+    <artifactId>BusNGo</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>BusNGo</name>
+    <description>BusNGo</description>
+    <properties>
+        <java.version>21</java.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-thymeleaf</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.thymeleaf.extras</groupId>
+            <artifactId>thymeleaf-extras-springsecurity6</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.security</groupId>-->
+<!--            <artifactId>spring-security-test</artifactId>-->
+<!--            <scope>test</scope>-->
+<!--        </dependency>-->
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
Index: src/main/java/mk/ukim/finki/busngo/BusNGoApplication.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/BusNGoApplication.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/BusNGoApplication.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,13 @@
+package mk.ukim.finki.busngo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class BusNGoApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(BusNGoApplication.class, args);
+    }
+
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Avtobus.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Avtobus.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Avtobus.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,67 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.util.Collection;
+import java.util.Objects;
+
+@Entity
+public class Avtobus {
+    private String aRegistracija;
+    private String aSeriskiBroj;
+    private Short aBrojSedista;
+    private Collection<Instancanalinija> instancanalinijasByARegistracija;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "a_registracija", nullable = false, length = 8)
+    public String getaRegistracija() {
+        return aRegistracija;
+    }
+
+    public void setaRegistracija(String aRegistracija) {
+        this.aRegistracija = aRegistracija;
+    }
+
+    @Basic
+    @Column(name = "a_seriski_broj", nullable = false)
+    public String getaSeriskiBroj() {
+        return aSeriskiBroj;
+    }
+
+    public void setaSeriskiBroj(String aSeriskiBroj) {
+        this.aSeriskiBroj = aSeriskiBroj;
+    }
+
+    @Basic
+    @Column(name = "a_broj_sedista", nullable = true)
+    public Short getaBrojSedista() {
+        return aBrojSedista;
+    }
+
+    public void setaBrojSedista(Short aBrojSedista) {
+        this.aBrojSedista = aBrojSedista;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Avtobus avtobus = (Avtobus) o;
+        return Objects.equals(aRegistracija, avtobus.aRegistracija) && Objects.equals(aSeriskiBroj, avtobus.aSeriskiBroj) && Objects.equals(aBrojSedista, avtobus.aBrojSedista);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(aRegistracija, aSeriskiBroj, aBrojSedista);
+    }
+
+    @OneToMany(mappedBy = "avtobusByARegistracija")
+    public Collection<Instancanalinija> getInstancanalinijasByARegistracija() {
+        return instancanalinijasByARegistracija;
+    }
+
+    public void setInstancanalinijasByARegistracija(Collection<Instancanalinija> instancanalinijasByARegistracija) {
+        this.instancanalinijasByARegistracija = instancanalinijasByARegistracija;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Bilet.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Bilet.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Bilet.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,114 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+import mk.ukim.finki.busngo.model.enums.BILET_STATUS;
+
+import java.sql.Timestamp;
+import java.util.Collection;
+import java.util.Objects;
+
+@Entity
+public class Bilet {
+    private Long bId;
+    private Timestamp bDatumNaKupuvanje;
+    private BILET_STATUS bStatus;
+    private Long patnikKId;
+    private Long tbId;
+    private Korisnik korisnikByPatnikKId;
+    private Tipbilet tipbiletByTbId;
+    private Collection<Vozenje> vozenjesByBId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "b_id", nullable = false)
+    public Long getbId() {
+        return bId;
+    }
+
+    public void setbId(Long bId) {
+        this.bId = bId;
+    }
+
+    @Basic
+    @Column(name = "b_datum_na_kupuvanje", nullable = false)
+    public Timestamp getbDatumNaKupuvanje() {
+        return bDatumNaKupuvanje;
+    }
+
+    public void setbDatumNaKupuvanje(Timestamp bDatumNaKupuvanje) {
+        this.bDatumNaKupuvanje = bDatumNaKupuvanje;
+    }
+
+    @Basic
+    @Column(name = "b_status", nullable = false)
+    @Enumerated(EnumType.STRING)
+    public BILET_STATUS getbStatus() {
+        return bStatus;
+    }
+
+    public void setbStatus(BILET_STATUS bStatus) {
+        this.bStatus = bStatus;
+    }
+
+    @Basic
+    @Column(name = "patnik_k_id", nullable = true)
+    public Long getPatnikKId() {
+        return patnikKId;
+    }
+
+    public void setPatnikKId(Long patnikKId) {
+        this.patnikKId = patnikKId;
+    }
+
+    @Basic
+    @Column(name = "tb_id", nullable = true)
+    public Long getTbId() {
+        return tbId;
+    }
+
+    public void setTbId(Long tbId) {
+        this.tbId = tbId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Bilet bilet = (Bilet) o;
+        return Objects.equals(bId, bilet.bId) && Objects.equals(bDatumNaKupuvanje, bilet.bDatumNaKupuvanje) && Objects.equals(bStatus, bilet.bStatus) && Objects.equals(patnikKId, bilet.patnikKId) && Objects.equals(tbId, bilet.tbId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(bId, bDatumNaKupuvanje, bStatus, patnikKId, tbId);
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "patnik_k_id", referencedColumnName = "k_id")
+    public Korisnik getKorisnikByPatnikKId() {
+        return korisnikByPatnikKId;
+    }
+
+    public void setKorisnikByPatnikKId(Korisnik korisnikByPatnikKId) {
+        this.korisnikByPatnikKId = korisnikByPatnikKId;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "tb_id", referencedColumnName = "tb_id")
+    public Tipbilet getTipbiletByTbId() {
+        return tipbiletByTbId;
+    }
+
+    public void setTipbiletByTbId(Tipbilet tipbiletByTbId) {
+        this.tipbiletByTbId = tipbiletByTbId;
+    }
+
+    @OneToMany(mappedBy = "biletByBId")
+    public Collection<Vozenje> getVozenjesByBId() {
+        return vozenjesByBId;
+    }
+
+    public void setVozenjesByBId(Collection<Vozenje> vozenjesByBId) {
+        this.vozenjesByBId = vozenjesByBId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Instancanalinija.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Instancanalinija.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Instancanalinija.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,144 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.sql.Timestamp;
+import java.util.Collection;
+import java.util.Objects;
+
+@Entity
+public class Instancanalinija {
+    private Long inlId;
+    private Timestamp inlDatumStart;
+    private Timestamp inlDatumEnd;
+    private Long vozacKId;
+    private String aRegistracija;
+    private Integer liId;
+    private Korisnik korisnikByVozacKId;
+    private Avtobus avtobusByARegistracija;
+    private Linija linijaByLiId;
+    private Collection<Vozenje> vozenjesByInlId;
+    private Collection<Kontroli> kontrolisByInlId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "inl_id", nullable = false)
+    public Long getInlId() {
+        return inlId;
+    }
+
+    public void setInlId(Long inlId) {
+        this.inlId = inlId;
+    }
+
+    @Basic
+    @Column(name = "inl_datum_start", nullable = false)
+    public Timestamp getInlDatumStart() {
+        return inlDatumStart;
+    }
+
+    public void setInlDatumStart(Timestamp inlDatumStart) {
+        this.inlDatumStart = inlDatumStart;
+    }
+
+    @Basic
+    @Column(name = "inl_datum_end", nullable = true)
+    public Timestamp getInlDatumEnd() {
+        return inlDatumEnd;
+    }
+
+    public void setInlDatumEnd(Timestamp inlDatumEnd) {
+        this.inlDatumEnd = inlDatumEnd;
+    }
+
+    @Basic
+    @Column(name = "vozac_k_id", nullable = false)
+    public Long getVozacKId() {
+        return vozacKId;
+    }
+
+    public void setVozacKId(Long vozacKId) {
+        this.vozacKId = vozacKId;
+    }
+
+    @Basic
+    @Column(name = "a_registracija", nullable = true, length = 8)
+    public String getaRegistracija() {
+        return aRegistracija;
+    }
+
+    public void setaRegistracija(String aRegistracija) {
+        this.aRegistracija = aRegistracija;
+    }
+
+    @Basic
+    @Column(name = "li_id", nullable = false)
+    public Integer getLiId() {
+        return liId;
+    }
+
+    public void setLiId(Integer liId) {
+        this.liId = liId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Instancanalinija that = (Instancanalinija) o;
+        return Objects.equals(inlId, that.inlId) && Objects.equals(inlDatumStart, that.inlDatumStart) && Objects.equals(inlDatumEnd, that.inlDatumEnd) && Objects.equals(vozacKId, that.vozacKId) && Objects.equals(aRegistracija, that.aRegistracija) && Objects.equals(liId, that.liId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(inlId, inlDatumStart, inlDatumEnd, vozacKId, aRegistracija, liId);
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "vozac_k_id", referencedColumnName = "k_id", nullable = false)
+    public Korisnik getKorisnikByVozacKId() {
+        return korisnikByVozacKId;
+    }
+
+    public void setKorisnikByVozacKId(Korisnik korisnikByVozacKId) {
+        this.korisnikByVozacKId = korisnikByVozacKId;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "a_registracija", referencedColumnName = "a_registracija")
+    public Avtobus getAvtobusByARegistracija() {
+        return avtobusByARegistracija;
+    }
+
+    public void setAvtobusByARegistracija(Avtobus avtobusByARegistracija) {
+        this.avtobusByARegistracija = avtobusByARegistracija;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "li_id", referencedColumnName = "li_id", nullable = false)
+    public Linija getLinijaByLiId() {
+        return linijaByLiId;
+    }
+
+    public void setLinijaByLiId(Linija linijaByLiId) {
+        this.linijaByLiId = linijaByLiId;
+    }
+
+    @OneToMany(mappedBy = "instancanalinijaByInlId")
+    public Collection<Vozenje> getVozenjesByInlId() {
+        return vozenjesByInlId;
+    }
+
+    public void setVozenjesByInlId(Collection<Vozenje> vozenjesByInlId) {
+        this.vozenjesByInlId = vozenjesByInlId;
+    }
+
+    @OneToMany(mappedBy = "instancanalinijaByInlId")
+    public Collection<Kontroli> getKontrolisByInlId() {
+        return kontrolisByInlId;
+    }
+
+    public void setKontrolisByInlId(Collection<Kontroli> kontrolisByInlId) {
+        this.kontrolisByInlId = kontrolisByInlId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Kazna.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Kazna.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Kazna.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,154 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.sql.Timestamp;
+import java.util.Objects;
+
+@Entity
+public class Kazna {
+    private Long kzId;
+    private Double kzIznos;
+    private Boolean kzPlateno;
+    private Timestamp kzDatum;
+    private Timestamp kzDatumPlateno;
+    private String kzDokument;
+    private Long kondukterKId;
+    private Long kontrolaId;
+    private Korisnik korisnikByKondukterKId;
+    private Kontroli kontroliByKontrolaId;
+    private Kaznazaneregistriran kaznazaneregistriranByKzId;
+    private Kaznazaregistriran kaznazaregistriranByKzId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "kz_id", nullable = false)
+    public Long getKzId() {
+        return kzId;
+    }
+
+    public void setKzId(Long kzId) {
+        this.kzId = kzId;
+    }
+
+    @Basic
+    @Column(name = "kz_iznos", nullable = false, precision = 0)
+    public Double getKzIznos() {
+        return kzIznos;
+    }
+
+    public void setKzIznos(Double kzIznos) {
+        this.kzIznos = kzIznos;
+    }
+
+    @Basic
+    @Column(name = "kz_plateno", nullable = false)
+    public Boolean getKzPlateno() {
+        return kzPlateno;
+    }
+
+    public void setKzPlateno(Boolean kzPlateno) {
+        this.kzPlateno = kzPlateno;
+    }
+
+    @Basic
+    @Column(name = "kz_datum", nullable = false)
+    public Timestamp getKzDatum() {
+        return kzDatum;
+    }
+
+    public void setKzDatum(Timestamp kzDatum) {
+        this.kzDatum = kzDatum;
+    }
+
+    @Basic
+    @Column(name = "kz_datum_plateno", nullable = true)
+    public Timestamp getKzDatumPlateno() {
+        return kzDatumPlateno;
+    }
+
+    public void setKzDatumPlateno(Timestamp kzDatumPlateno) {
+        this.kzDatumPlateno = kzDatumPlateno;
+    }
+
+    @Basic
+    @Column(name = "kz_dokument", nullable = false)
+    public String getKzDokument() {
+        return kzDokument;
+    }
+
+    public void setKzDokument(String kzDokument) {
+        this.kzDokument = kzDokument;
+    }
+
+    @Basic
+    @Column(name = "kondukter_k_id", nullable = true)
+    public Long getKondukterKId() {
+        return kondukterKId;
+    }
+
+    public void setKondukterKId(Long kondukterKId) {
+        this.kondukterKId = kondukterKId;
+    }
+
+    @Basic
+    @Column(name = "kontrola_id", nullable = true)
+    public Long getKontrolaId() {
+        return kontrolaId;
+    }
+
+    public void setKontrolaId(Long kontrolaId) {
+        this.kontrolaId = kontrolaId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Kazna kazna = (Kazna) o;
+        return Objects.equals(kzId, kazna.kzId) && Objects.equals(kzIznos, kazna.kzIznos) && Objects.equals(kzPlateno, kazna.kzPlateno) && Objects.equals(kzDatum, kazna.kzDatum) && Objects.equals(kzDatumPlateno, kazna.kzDatumPlateno) && Objects.equals(kzDokument, kazna.kzDokument) && Objects.equals(kondukterKId, kazna.kondukterKId) && Objects.equals(kontrolaId, kazna.kontrolaId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(kzId, kzIznos, kzPlateno, kzDatum, kzDatumPlateno, kzDokument, kondukterKId, kontrolaId);
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "kondukter_k_id", referencedColumnName = "k_id")
+    public Korisnik getKorisnikByKondukterKId() {
+        return korisnikByKondukterKId;
+    }
+
+    public void setKorisnikByKondukterKId(Korisnik korisnikByKondukterKId) {
+        this.korisnikByKondukterKId = korisnikByKondukterKId;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "kontrola_id", referencedColumnName = "kontrola_id")
+    public Kontroli getKontroliByKontrolaId() {
+        return kontroliByKontrolaId;
+    }
+
+    public void setKontroliByKontrolaId(Kontroli kontroliByKontrolaId) {
+        this.kontroliByKontrolaId = kontroliByKontrolaId;
+    }
+
+    @OneToOne(mappedBy = "kaznaByKzId")
+    public Kaznazaneregistriran getKaznazaneregistriranByKzId() {
+        return kaznazaneregistriranByKzId;
+    }
+
+    public void setKaznazaneregistriranByKzId(Kaznazaneregistriran kaznazaneregistriranByKzId) {
+        this.kaznazaneregistriranByKzId = kaznazaneregistriranByKzId;
+    }
+
+    @OneToOne(mappedBy = "kaznaByKzId")
+    public Kaznazaregistriran getKaznazaregistriranByKzId() {
+        return kaznazaregistriranByKzId;
+    }
+
+    public void setKaznazaregistriranByKzId(Kaznazaregistriran kaznazaregistriranByKzId) {
+        this.kaznazaregistriranByKzId = kaznazaregistriranByKzId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Kaznazaneregistriran.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Kaznazaneregistriran.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Kaznazaneregistriran.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,78 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.util.Objects;
+
+@Entity
+public class Kaznazaneregistriran {
+    private Long kzId;
+    private Object kznTelefon;
+    private Object kznIme;
+    private Object kznAdresa;
+    private Kazna kaznaByKzId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "kz_id", nullable = false)
+    public Long getKzId() {
+        return kzId;
+    }
+
+    public void setKzId(Long kzId) {
+        this.kzId = kzId;
+    }
+
+    @Basic
+    @Column(name = "kzn_telefon", nullable = true)
+    public Object getKznTelefon() {
+        return kznTelefon;
+    }
+
+    public void setKznTelefon(Object kznTelefon) {
+        this.kznTelefon = kznTelefon;
+    }
+
+    @Basic
+    @Column(name = "kzn_ime", nullable = false)
+    public Object getKznIme() {
+        return kznIme;
+    }
+
+    public void setKznIme(Object kznIme) {
+        this.kznIme = kznIme;
+    }
+
+    @Basic
+    @Column(name = "kzn_adresa", nullable = false)
+    public Object getKznAdresa() {
+        return kznAdresa;
+    }
+
+    public void setKznAdresa(Object kznAdresa) {
+        this.kznAdresa = kznAdresa;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Kaznazaneregistriran that = (Kaznazaneregistriran) o;
+        return Objects.equals(kzId, that.kzId) && Objects.equals(kznTelefon, that.kznTelefon) && Objects.equals(kznIme, that.kznIme) && Objects.equals(kznAdresa, that.kznAdresa);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(kzId, kznTelefon, kznIme, kznAdresa);
+    }
+
+    @OneToOne
+    @JoinColumn(name = "kz_id", referencedColumnName = "kz_id", nullable = false)
+    public Kazna getKaznaByKzId() {
+        return kaznaByKzId;
+    }
+
+    public void setKaznaByKzId(Kazna kaznaByKzId) {
+        this.kaznaByKzId = kaznaByKzId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Kaznazaregistriran.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Kaznazaregistriran.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Kaznazaregistriran.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,67 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.util.Objects;
+
+@Entity
+public class Kaznazaregistriran {
+    private Long kzId;
+    private Long patnikKId;
+    private Kazna kaznaByKzId;
+    private Korisnik korisnikByPatnikKId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "kz_id", nullable = false)
+    public Long getKzId() {
+        return kzId;
+    }
+
+    public void setKzId(Long kzId) {
+        this.kzId = kzId;
+    }
+
+    @Basic
+    @Column(name = "patnik_k_id", nullable = true)
+    public Long getPatnikKId() {
+        return patnikKId;
+    }
+
+    public void setPatnikKId(Long patnikKId) {
+        this.patnikKId = patnikKId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Kaznazaregistriran that = (Kaznazaregistriran) o;
+        return Objects.equals(kzId, that.kzId) && Objects.equals(patnikKId, that.patnikKId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(kzId, patnikKId);
+    }
+
+    @OneToOne
+    @JoinColumn(name = "kz_id", referencedColumnName = "kz_id", nullable = false)
+    public Kazna getKaznaByKzId() {
+        return kaznaByKzId;
+    }
+
+    public void setKaznaByKzId(Kazna kaznaByKzId) {
+        this.kaznaByKzId = kaznaByKzId;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "patnik_k_id", referencedColumnName = "k_id")
+    public Korisnik getKorisnikByPatnikKId() {
+        return korisnikByPatnikKId;
+    }
+
+    public void setKorisnikByPatnikKId(Korisnik korisnikByPatnikKId) {
+        this.korisnikByPatnikKId = korisnikByPatnikKId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Kondukter.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Kondukter.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Kondukter.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,45 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.util.Objects;
+
+@Entity
+public class Kondukter {
+    private Long kId;
+    private Korisnik korisnikByKId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "k_id", nullable = false)
+    public Long getkId() {
+        return kId;
+    }
+
+    public void setkId(Long kId) {
+        this.kId = kId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Kondukter kondukter = (Kondukter) o;
+        return Objects.equals(kId, kondukter.kId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(kId);
+    }
+
+    @OneToOne
+    @JoinColumn(name = "k_id", referencedColumnName = "k_id", nullable = false)
+    public Korisnik getKorisnikByKId() {
+        return korisnikByKId;
+    }
+
+    public void setKorisnikByKId(Korisnik korisnikByKId) {
+        this.korisnikByKId = korisnikByKId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Kontroli.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Kontroli.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Kontroli.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,101 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.sql.Timestamp;
+import java.util.Collection;
+import java.util.Objects;
+
+@Entity
+public class Kontroli {
+    private Long kontrolaId;
+    private Timestamp kontrolaDatum;
+    private Long kondukterKId;
+    private Long inlId;
+    private Korisnik korisnikByKondukterKId;
+    private Instancanalinija instancanalinijaByInlId;
+    private Collection<Kazna> kaznasByKontrolaId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "kontrola_id", nullable = false)
+    public Long getKontrolaId() {
+        return kontrolaId;
+    }
+
+    public void setKontrolaId(Long kontrolaId) {
+        this.kontrolaId = kontrolaId;
+    }
+
+    @Basic
+    @Column(name = "kontrola_datum", nullable = false)
+    public Timestamp getKontrolaDatum() {
+        return kontrolaDatum;
+    }
+
+    public void setKontrolaDatum(Timestamp kontrolaDatum) {
+        this.kontrolaDatum = kontrolaDatum;
+    }
+
+    @Basic
+    @Column(name = "kondukter_k_id", nullable = true)
+    public Long getKondukterKId() {
+        return kondukterKId;
+    }
+
+    public void setKondukterKId(Long kondukterKId) {
+        this.kondukterKId = kondukterKId;
+    }
+
+    @Basic
+    @Column(name = "inl_id", nullable = true)
+    public Long getInlId() {
+        return inlId;
+    }
+
+    public void setInlId(Long inlId) {
+        this.inlId = inlId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Kontroli kontroli = (Kontroli) o;
+        return Objects.equals(kontrolaId, kontroli.kontrolaId) && Objects.equals(kontrolaDatum, kontroli.kontrolaDatum) && Objects.equals(kondukterKId, kontroli.kondukterKId) && Objects.equals(inlId, kontroli.inlId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(kontrolaId, kontrolaDatum, kondukterKId, inlId);
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "kondukter_k_id", referencedColumnName = "k_id")
+    public Korisnik getKorisnikByKondukterKId() {
+        return korisnikByKondukterKId;
+    }
+
+    public void setKorisnikByKondukterKId(Korisnik korisnikByKondukterKId) {
+        this.korisnikByKondukterKId = korisnikByKondukterKId;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "inl_id", referencedColumnName = "inl_id")
+    public Instancanalinija getInstancanalinijaByInlId() {
+        return instancanalinijaByInlId;
+    }
+
+    public void setInstancanalinijaByInlId(Instancanalinija instancanalinijaByInlId) {
+        this.instancanalinijaByInlId = instancanalinijaByInlId;
+    }
+
+    @OneToMany(mappedBy = "kontroliByKontrolaId")
+    public Collection<Kazna> getKaznasByKontrolaId() {
+        return kaznasByKontrolaId;
+    }
+
+    public void setKaznasByKontrolaId(Collection<Kazna> kaznasByKontrolaId) {
+        this.kaznasByKontrolaId = kaznasByKontrolaId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Korisnik.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Korisnik.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Korisnik.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,202 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.util.Collection;
+import java.util.Objects;
+
+@Entity
+public class Korisnik {
+    private Long kId;
+    private String kIme;
+    private String kAdresa;
+    private String kTelefon;
+    private String kEmail;
+    private String kEmbg;
+    private Boolean kIsAdmin;
+    private String kLozinka;
+    private Patnik patnikByKId;
+    private Vraboten vrabotenByKId;
+    private Kondukter kondukterByKId;
+    private Vozac vozacByKId;
+    private Collection<Bilet> biletsByKId;
+    private Collection<Vozenje> vozenjesByKId;
+    private Collection<Kontroli> kontrolisByKId;
+    private Collection<Kazna> kaznasByKId;
+    private Collection<Kaznazaregistriran> kaznazaregistriransByKId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "k_id", nullable = false)
+    public Long getkId() {
+        return kId;
+    }
+
+    public void setkId(Long kId) {
+        this.kId = kId;
+    }
+
+    @Basic
+    @Column(name = "k_ime", nullable = false)
+    public String getkIme() {
+        return kIme;
+    }
+
+    public void setkIme(String kIme) {
+        this.kIme = kIme;
+    }
+
+    @Basic
+    @Column(name = "k_adresa", nullable = true)
+    public String getkAdresa() {
+        return kAdresa;
+    }
+
+    public void setkAdresa(String kAdresa) {
+        this.kAdresa = kAdresa;
+    }
+
+    @Basic
+    @Column(name = "k_telefon", nullable = false)
+    public String getkTelefon() {
+        return kTelefon;
+    }
+
+    public void setkTelefon(String kTelefon) {
+        this.kTelefon = kTelefon;
+    }
+
+    @Basic
+    @Column(name = "k_email", nullable = false)
+    public String getkEmail() {
+        return kEmail;
+    }
+
+    public void setkEmail(String kEmail) {
+        this.kEmail = kEmail;
+    }
+
+    @Basic
+    @Column(name = "k_embg", nullable = true, length = 13)
+    public String getkEmbg() {
+        return kEmbg;
+    }
+
+    public void setkEmbg(String kEmbg) {
+        this.kEmbg = kEmbg;
+    }
+
+    @Basic
+    @Column(name = "k_is_admin", nullable = false)
+    public Boolean getkIsAdmin() {
+        return kIsAdmin;
+    }
+
+    public void setkIsAdmin(Boolean kIsAdmin) {
+        this.kIsAdmin = kIsAdmin;
+    }
+
+    @Basic
+    @Column(name = "k_lozinka", nullable = false)
+    public String getkLozinka() {
+        return kLozinka;
+    }
+
+    public void setkLozinka(String kLozinka) {
+        this.kLozinka = kLozinka;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Korisnik korisnik = (Korisnik) o;
+        return Objects.equals(kId, korisnik.kId) && Objects.equals(kIme, korisnik.kIme) && Objects.equals(kAdresa, korisnik.kAdresa) && Objects.equals(kTelefon, korisnik.kTelefon) && Objects.equals(kEmail, korisnik.kEmail) && Objects.equals(kEmbg, korisnik.kEmbg) && Objects.equals(kIsAdmin, korisnik.kIsAdmin) && Objects.equals(kLozinka, korisnik.kLozinka);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(kId, kIme, kAdresa, kTelefon, kEmail, kEmbg, kIsAdmin, kLozinka);
+    }
+
+    @OneToOne(mappedBy = "korisnikByKId")
+    public Patnik getPatnikByKId() {
+        return patnikByKId;
+    }
+
+    public void setPatnikByKId(Patnik patnikByKId) {
+        this.patnikByKId = patnikByKId;
+    }
+
+    @OneToOne(mappedBy = "korisnikByKId")
+    public Vraboten getVrabotenByKId() {
+        return vrabotenByKId;
+    }
+
+    public void setVrabotenByKId(Vraboten vrabotenByKId) {
+        this.vrabotenByKId = vrabotenByKId;
+    }
+
+    @OneToOne(mappedBy = "korisnikByKId")
+    public Kondukter getKondukterByKId() {
+        return kondukterByKId;
+    }
+
+    public void setKondukterByKId(Kondukter kondukterByKId) {
+        this.kondukterByKId = kondukterByKId;
+    }
+
+    @OneToOne(mappedBy = "korisnikByKId")
+    public Vozac getVozacByKId() {
+        return vozacByKId;
+    }
+
+    public void setVozacByKId(Vozac vozacByKId) {
+        this.vozacByKId = vozacByKId;
+    }
+
+    @OneToMany(mappedBy = "korisnikByPatnikKId")
+    public Collection<Bilet> getBiletsByKId() {
+        return biletsByKId;
+    }
+
+    public void setBiletsByKId(Collection<Bilet> biletsByKId) {
+        this.biletsByKId = biletsByKId;
+    }
+
+    @OneToMany(mappedBy = "korisnikByPatnikKId")
+    public Collection<Vozenje> getVozenjesByKId() {
+        return vozenjesByKId;
+    }
+
+    public void setVozenjesByKId(Collection<Vozenje> vozenjesByKId) {
+        this.vozenjesByKId = vozenjesByKId;
+    }
+
+    @OneToMany(mappedBy = "korisnikByKondukterKId")
+    public Collection<Kontroli> getKontrolisByKId() {
+        return kontrolisByKId;
+    }
+
+    public void setKontrolisByKId(Collection<Kontroli> kontrolisByKId) {
+        this.kontrolisByKId = kontrolisByKId;
+    }
+
+    @OneToMany(mappedBy = "korisnikByKondukterKId")
+    public Collection<Kazna> getKaznasByKId() {
+        return kaznasByKId;
+    }
+
+    public void setKaznasByKId(Collection<Kazna> kaznasByKId) {
+        this.kaznasByKId = kaznasByKId;
+    }
+
+    @OneToMany(mappedBy = "korisnikByPatnikKId")
+    public Collection<Kaznazaregistriran> getKaznazaregistriransByKId() {
+        return kaznazaregistriransByKId;
+    }
+
+    public void setKaznazaregistriransByKId(Collection<Kaznazaregistriran> kaznazaregistriransByKId) {
+        this.kaznazaregistriransByKId = kaznazaregistriransByKId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Linija.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Linija.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Linija.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,78 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+
+@Entity
+public class Linija {
+    private Integer liId;
+    private String liIme;
+    private String liPravec;
+    private List<Postojkanalinija> postojkanalinijasByLiId;
+    private List<Instancanalinija> instancanalinijasByLiId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "li_id", nullable = false)
+    public Integer getLiId() {
+        return liId;
+    }
+
+    public void setLiId(Integer liId) {
+        this.liId = liId;
+    }
+
+    @Basic
+    @Column(name = "li_ime", nullable = false)
+    public String getLiIme() {
+        return liIme;
+    }
+
+    public void setLiIme(String liIme) {
+        this.liIme = liIme;
+    }
+
+    @Basic
+    @Column(name = "li_pravec", nullable = false)
+    public String getLiPravec() {
+        return liPravec;
+    }
+
+    public void setLiPravec(String liPravec) {
+        this.liPravec = liPravec;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Linija linija = (Linija) o;
+        return Objects.equals(liId, linija.liId) && Objects.equals(liIme, linija.liIme) && Objects.equals(liPravec, linija.liPravec);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(liId, liIme, liPravec);
+    }
+
+    @OneToMany(mappedBy = "linijaByLiId")
+    public List<Postojkanalinija> getPostojkanalinijasByLiId() {
+        return postojkanalinijasByLiId;
+    }
+
+    public void setPostojkanalinijasByLiId(List<Postojkanalinija> postojkanalinijasByLiId) {
+        this.postojkanalinijasByLiId = postojkanalinijasByLiId;
+    }
+
+    @OneToMany(mappedBy = "linijaByLiId")
+    public List<Instancanalinija> getInstancanalinijasByLiId() {
+        return instancanalinijasByLiId;
+    }
+
+    public void setInstancanalinijasByLiId(List<Instancanalinija> instancanalinijasByLiId) {
+        this.instancanalinijasByLiId = instancanalinijasByLiId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Mesto.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Mesto.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Mesto.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,79 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+
+@Entity
+public class Mesto {
+    private Integer mId;
+    private String mGrad;
+    private String mOpstina;
+    private String mUlica;
+    private List<Postojka> postojkasByMId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "m_id", nullable = false)
+    public Integer getmId() {
+        return mId;
+    }
+
+    public void setmId(Integer mId) {
+        this.mId = mId;
+    }
+
+    @Basic
+    @Column(name = "m_grad", nullable = false)
+    public String getmGrad() {
+        return mGrad;
+    }
+
+    public void setmGrad(String mGrad) {
+        this.mGrad = mGrad;
+    }
+
+    @Basic
+    @Column(name = "m_opstina", nullable = false)
+    public String getmOpstina() {
+        return mOpstina;
+    }
+
+    public void setmOpstina(String mOpstina) {
+        this.mOpstina = mOpstina;
+    }
+
+    @Basic
+    @Column(name = "m_ulica", nullable = false)
+    public String getmUlica() {
+        return mUlica;
+    }
+
+    public void setmUlica(String mUlica) {
+        this.mUlica = mUlica;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Mesto mesto = (Mesto) o;
+        return Objects.equals(mId, mesto.mId) && Objects.equals(mGrad, mesto.mGrad) && Objects.equals(mOpstina, mesto.mOpstina) && Objects.equals(mUlica, mesto.mUlica);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mId, mGrad, mOpstina, mUlica);
+    }
+
+    @OneToMany(mappedBy = "mestoByMId")
+    public List<Postojka> getPostojkasByMId() {
+        return postojkasByMId;
+    }
+
+    public void setPostojkasByMId(List<Postojka> postojkasByMId) {
+        this.postojkasByMId = postojkasByMId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Patnik.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Patnik.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Patnik.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,45 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.util.Objects;
+
+@Entity
+public class Patnik {
+    private Long kId;
+    private Korisnik korisnikByKId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "k_id", nullable = false)
+    public Long getkId() {
+        return kId;
+    }
+
+    public void setkId(Long kId) {
+        this.kId = kId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Patnik patnik = (Patnik) o;
+        return Objects.equals(kId, patnik.kId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(kId);
+    }
+
+    @OneToOne
+    @JoinColumn(name = "k_id", referencedColumnName = "k_id", nullable = false)
+    public Korisnik getKorisnikByKId() {
+        return korisnikByKId;
+    }
+
+    public void setKorisnikByKId(Korisnik korisnikByKId) {
+        this.korisnikByKId = korisnikByKId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Postojka.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Postojka.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Postojka.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,79 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+
+@Entity
+public class Postojka {
+    private Integer pId;
+    private String pIme;
+    private Integer mId;
+    private Mesto mestoByMId;
+    private List<Postojkanalinija> postojkanalinijasByPId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "p_id", nullable = false)
+    public Integer getpId() {
+        return pId;
+    }
+
+    public void setpId(Integer pId) {
+        this.pId = pId;
+    }
+
+    @Basic
+    @Column(name = "p_ime", nullable = false)
+    public String getpIme() {
+        return pIme;
+    }
+
+    public void setpIme(String pIme) {
+        this.pIme = pIme;
+    }
+
+    @Basic
+    @Column(name = "m_id", nullable = true)
+    public Integer getmId() {
+        return mId;
+    }
+
+    public void setmId(Integer mId) {
+        this.mId = mId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Postojka postojka = (Postojka) o;
+        return Objects.equals(pId, postojka.pId) && Objects.equals(pIme, postojka.pIme) && Objects.equals(mId, postojka.mId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(pId, pIme, mId);
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "m_id", referencedColumnName = "m_id")
+    public Mesto getMestoByMId() {
+        return mestoByMId;
+    }
+
+    public void setMestoByMId(Mesto mestoByMId) {
+        this.mestoByMId = mestoByMId;
+    }
+
+    @OneToMany(mappedBy = "postojkaByPId")
+    public List<Postojkanalinija> getPostojkanalinijasByPId() {
+        return postojkanalinijasByPId;
+    }
+
+    public void setPostojkanalinijasByPId(List<Postojkanalinija> postojkanalinijasByPId) {
+        this.postojkanalinijasByPId = postojkanalinijasByPId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Postojkanalinija.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Postojkanalinija.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Postojkanalinija.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,100 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.util.Collection;
+import java.util.Objects;
+
+@Entity
+public class Postojkanalinija {
+    private Long pnlId;
+    private Short pnlRedenBroj;
+    private Integer liId;
+    private Integer pId;
+    private Linija linijaByLiId;
+    private Postojka postojkaByPId;
+    private Collection<Vozenje> vozenjesByPnlId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "pnl_id", nullable = false)
+    public Long getPnlId() {
+        return pnlId;
+    }
+
+    public void setPnlId(Long pnlId) {
+        this.pnlId = pnlId;
+    }
+
+    @Basic
+    @Column(name = "pnl_reden_broj", nullable = false)
+    public Short getPnlRedenBroj() {
+        return pnlRedenBroj;
+    }
+
+    public void setPnlRedenBroj(Short pnlRedenBroj) {
+        this.pnlRedenBroj = pnlRedenBroj;
+    }
+
+    @Basic
+    @Column(name = "li_id", nullable = false)
+    public Integer getLiId() {
+        return liId;
+    }
+
+    public void setLiId(Integer liId) {
+        this.liId = liId;
+    }
+
+    @Basic
+    @Column(name = "p_id", nullable = false)
+    public Integer getpId() {
+        return pId;
+    }
+
+    public void setpId(Integer pId) {
+        this.pId = pId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Postojkanalinija that = (Postojkanalinija) o;
+        return Objects.equals(pnlId, that.pnlId) && Objects.equals(pnlRedenBroj, that.pnlRedenBroj) && Objects.equals(liId, that.liId) && Objects.equals(pId, that.pId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(pnlId, pnlRedenBroj, liId, pId);
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "li_id", referencedColumnName = "li_id", nullable = false)
+    public Linija getLinijaByLiId() {
+        return linijaByLiId;
+    }
+
+    public void setLinijaByLiId(Linija linijaByLiId) {
+        this.linijaByLiId = linijaByLiId;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "p_id", referencedColumnName = "p_id", nullable = false)
+    public Postojka getPostojkaByPId() {
+        return postojkaByPId;
+    }
+
+    public void setPostojkaByPId(Postojka postojkaByPId) {
+        this.postojkaByPId = postojkaByPId;
+    }
+
+    @OneToMany(mappedBy = "postojkanalinijaByKacuvaPnlId")
+    public Collection<Vozenje> getVozenjesByPnlId() {
+        return vozenjesByPnlId;
+    }
+
+    public void setVozenjesByPnlId(Collection<Vozenje> vozenjesByPnlId) {
+        this.vozenjesByPnlId = vozenjesByPnlId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/SeSimnuvaNa.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/SeSimnuvaNa.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/SeSimnuvaNa.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,52 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+
+import java.util.Objects;
+
+@Entity
+@jakarta.persistence.Table(name = "se_simnuva_na", schema = "project", catalog = "db_202324z_va_prj_busngo")
+@jakarta.persistence.IdClass(mk.ukim.finki.busngo.model.SeSimnuvaNaPK.class)
+public class SeSimnuvaNa {
+    private Long pnlId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @jakarta.persistence.Column(name = "pnl_id", nullable = false)
+    public Long getPnlId() {
+        return pnlId;
+    }
+
+    public void setPnlId(Long pnlId) {
+        this.pnlId = pnlId;
+    }
+
+    private Long vozenjeId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @jakarta.persistence.Column(name = "vozenje_id", nullable = false)
+    public Long getVozenjeId() {
+        return vozenjeId;
+    }
+
+    public void setVozenjeId(Long vozenjeId) {
+        this.vozenjeId = vozenjeId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        SeSimnuvaNa that = (SeSimnuvaNa) o;
+        return Objects.equals(pnlId, that.pnlId) && Objects.equals(vozenjeId, that.vozenjeId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(pnlId, vozenjeId);
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/SeSimnuvaNaPK.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/SeSimnuvaNaPK.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/SeSimnuvaNaPK.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,6 @@
+package mk.ukim.finki.busngo.model;
+
+import java.io.Serializable;
+
+public class SeSimnuvaNaPK implements Serializable {
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Tipbilet.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Tipbilet.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Tipbilet.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,67 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.util.Collection;
+import java.util.Objects;
+
+@Entity
+public class Tipbilet {
+    private Integer tbId;
+    private Long tbTrajnost;
+    private String tbIme;
+    private Collection<Bilet> biletsByTbId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "tb_id", nullable = false)
+    public Integer getTbId() {
+        return tbId;
+    }
+
+    public void setTbId(Integer tbId) {
+        this.tbId = tbId;
+    }
+
+    @Basic
+    @Column(name = "tb_trajnost", nullable = false)
+    public Long getTbTrajnost() {
+        return tbTrajnost;
+    }
+
+    public void setTbTrajnost(Long tbTrajnost) {
+        this.tbTrajnost = tbTrajnost;
+    }
+
+    @Basic
+    @Column(name = "tb_ime", nullable = false)
+    public String getTbIme() {
+        return tbIme;
+    }
+
+    public void setTbIme(String tbIme) {
+        this.tbIme = tbIme;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Tipbilet tipbilet = (Tipbilet) o;
+        return Objects.equals(tbId, tipbilet.tbId) && Objects.equals(tbTrajnost, tipbilet.tbTrajnost) && Objects.equals(tbIme, tipbilet.tbIme);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(tbId, tbTrajnost, tbIme);
+    }
+
+    @OneToMany(mappedBy = "tipbiletByTbId")
+    public Collection<Bilet> getBiletsByTbId() {
+        return biletsByTbId;
+    }
+
+    public void setBiletsByTbId(Collection<Bilet> biletsByTbId) {
+        this.biletsByTbId = biletsByTbId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Vozac.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Vozac.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Vozac.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,45 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.util.Objects;
+
+@Entity
+public class Vozac {
+    private Long kId;
+    private Korisnik korisnikByKId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "k_id", nullable = false)
+    public Long getkId() {
+        return kId;
+    }
+
+    public void setkId(Long kId) {
+        this.kId = kId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Vozac vozac = (Vozac) o;
+        return Objects.equals(kId, vozac.kId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(kId);
+    }
+
+    @OneToOne
+    @JoinColumn(name = "k_id", referencedColumnName = "k_id", nullable = false)
+    public Korisnik getKorisnikByKId() {
+        return korisnikByKId;
+    }
+
+    public void setKorisnikByKId(Korisnik korisnikByKId) {
+        this.korisnikByKId = korisnikByKId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Vozenje.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Vozenje.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Vozenje.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,158 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+import mk.ukim.finki.busngo.model.enums.VOZENJE_STATUS;
+
+import java.sql.Timestamp;
+import java.util.Objects;
+
+@Entity
+public class Vozenje {
+    private Long vozenjeId;
+    private Timestamp vozenjeStart;
+    private Timestamp vozenjeEnd;
+    private VOZENJE_STATUS vozenjeStatus;
+    private Long patnikKId;
+    private Long kacuvaPnlId;
+    private Long inlId;
+    private Long bId;
+    private Korisnik korisnikByPatnikKId;
+    private Postojkanalinija postojkanalinijaByKacuvaPnlId;
+    private Instancanalinija instancanalinijaByInlId;
+    private Bilet biletByBId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "vozenje_id", nullable = false)
+    public Long getVozenjeId() {
+        return vozenjeId;
+    }
+
+    public void setVozenjeId(Long vozenjeId) {
+        this.vozenjeId = vozenjeId;
+    }
+
+    @Basic
+    @Column(name = "vozenje_start", nullable = false)
+    public Timestamp getVozenjeStart() {
+        return vozenjeStart;
+    }
+
+    public void setVozenjeStart(Timestamp vozenjeStart) {
+        this.vozenjeStart = vozenjeStart;
+    }
+
+    @Basic
+    @Column(name = "vozenje_end", nullable = true)
+    public Timestamp getVozenjeEnd() {
+        return vozenjeEnd;
+    }
+
+    public void setVozenjeEnd(Timestamp vozenjeEnd) {
+        this.vozenjeEnd = vozenjeEnd;
+    }
+
+    @Basic
+    @Column(name = "vozenje_status", nullable = false)
+    @Enumerated(EnumType.STRING)
+    public VOZENJE_STATUS getVozenjeStatus() {
+        return vozenjeStatus;
+    }
+
+    public void setVozenjeStatus(VOZENJE_STATUS vozenjeStatus) {
+        this.vozenjeStatus = vozenjeStatus;
+    }
+
+    @Basic
+    @Column(name = "patnik_k_id", nullable = true)
+    public Long getPatnikKId() {
+        return patnikKId;
+    }
+
+    public void setPatnikKId(Long patnikKId) {
+        this.patnikKId = patnikKId;
+    }
+
+    @Basic
+    @Column(name = "kacuva_pnl_id", nullable = false)
+    public Long getKacuvaPnlId() {
+        return kacuvaPnlId;
+    }
+
+    public void setKacuvaPnlId(Long kacuvaPnlId) {
+        this.kacuvaPnlId = kacuvaPnlId;
+    }
+
+    @Basic
+    @Column(name = "inl_id", nullable = false)
+    public Long getInlId() {
+        return inlId;
+    }
+
+    public void setInlId(Long inlId) {
+        this.inlId = inlId;
+    }
+
+    @Basic
+    @Column(name = "b_id", nullable = false)
+    public Long getbId() {
+        return bId;
+    }
+
+    public void setbId(Long bId) {
+        this.bId = bId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Vozenje vozenje = (Vozenje) o;
+        return Objects.equals(vozenjeId, vozenje.vozenjeId) && Objects.equals(vozenjeStart, vozenje.vozenjeStart) && Objects.equals(vozenjeEnd, vozenje.vozenjeEnd) && Objects.equals(vozenjeStatus, vozenje.vozenjeStatus) && Objects.equals(patnikKId, vozenje.patnikKId) && Objects.equals(kacuvaPnlId, vozenje.kacuvaPnlId) && Objects.equals(inlId, vozenje.inlId) && Objects.equals(bId, vozenje.bId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(vozenjeId, vozenjeStart, vozenjeEnd, vozenjeStatus, patnikKId, kacuvaPnlId, inlId, bId);
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "patnik_k_id", referencedColumnName = "k_id")
+    public Korisnik getKorisnikByPatnikKId() {
+        return korisnikByPatnikKId;
+    }
+
+    public void setKorisnikByPatnikKId(Korisnik korisnikByPatnikKId) {
+        this.korisnikByPatnikKId = korisnikByPatnikKId;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "kacuva_pnl_id", referencedColumnName = "pnl_id", nullable = false)
+    public Postojkanalinija getPostojkanalinijaByKacuvaPnlId() {
+        return postojkanalinijaByKacuvaPnlId;
+    }
+
+    public void setPostojkanalinijaByKacuvaPnlId(Postojkanalinija postojkanalinijaByKacuvaPnlId) {
+        this.postojkanalinijaByKacuvaPnlId = postojkanalinijaByKacuvaPnlId;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "inl_id", referencedColumnName = "inl_id", nullable = false)
+    public Instancanalinija getInstancanalinijaByInlId() {
+        return instancanalinijaByInlId;
+    }
+
+    public void setInstancanalinijaByInlId(Instancanalinija instancanalinijaByInlId) {
+        this.instancanalinijaByInlId = instancanalinijaByInlId;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "b_id", referencedColumnName = "b_id", nullable = false)
+    public Bilet getBiletByBId() {
+        return biletByBId;
+    }
+
+    public void setBiletByBId(Bilet biletByBId) {
+        this.biletByBId = biletByBId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/Vraboten.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/Vraboten.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/Vraboten.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,79 @@
+package mk.ukim.finki.busngo.model;
+
+import jakarta.persistence.*;
+
+import java.sql.Date;
+import java.util.Objects;
+
+@Entity
+public class Vraboten{
+    private Long kId;
+    private Double vPlata;
+    private Date vDatumNaVrabotuvanje;
+    private Date vDatumPrekinVrabotuvanje;
+    private Korisnik korisnikByKId;
+
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Id
+    @Column(name = "k_id", nullable = false)
+    public Long getkId() {
+        return kId;
+    }
+
+    public void setkId(Long kId) {
+        this.kId = kId;
+    }
+
+    @Basic
+    @Column(name = "v_plata", nullable = false, precision = 0)
+    public Double getvPlata() {
+        return vPlata;
+    }
+
+    public void setvPlata(Double vPlata) {
+        this.vPlata = vPlata;
+    }
+
+    @Basic
+    @Column(name = "v_datum_na_vrabotuvanje", nullable = false)
+    public Date getvDatumNaVrabotuvanje() {
+        return vDatumNaVrabotuvanje;
+    }
+
+    public void setvDatumNaVrabotuvanje(Date vDatumNaVrabotuvanje) {
+        this.vDatumNaVrabotuvanje = vDatumNaVrabotuvanje;
+    }
+
+    @Basic
+    @Column(name = "v_datum_prekin_vrabotuvanje", nullable = true)
+    public Date getvDatumPrekinVrabotuvanje() {
+        return vDatumPrekinVrabotuvanje;
+    }
+
+    public void setvDatumPrekinVrabotuvanje(Date vDatumPrekinVrabotuvanje) {
+        this.vDatumPrekinVrabotuvanje = vDatumPrekinVrabotuvanje;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Vraboten vraboten = (Vraboten) o;
+        return Objects.equals(kId, vraboten.kId) && Objects.equals(vPlata, vraboten.vPlata) && Objects.equals(vDatumNaVrabotuvanje, vraboten.vDatumNaVrabotuvanje) && Objects.equals(vDatumPrekinVrabotuvanje, vraboten.vDatumPrekinVrabotuvanje);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(kId, vPlata, vDatumNaVrabotuvanje, vDatumPrekinVrabotuvanje);
+    }
+
+    @OneToOne
+    @JoinColumn(name = "k_id", referencedColumnName = "k_id", nullable = false)
+    public Korisnik getKorisnikByKId() {
+        return korisnikByKId;
+    }
+
+    public void setKorisnikByKId(Korisnik korisnikByKId) {
+        this.korisnikByKId = korisnikByKId;
+    }
+}
Index: src/main/java/mk/ukim/finki/busngo/model/enums/BILET_STATUS.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/enums/BILET_STATUS.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/enums/BILET_STATUS.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,7 @@
+package mk.ukim.finki.busngo.model.enums;
+
+public enum BILET_STATUS {
+    INACTIVE,
+    ACTIVE,
+    EXPIRED
+}
Index: src/main/java/mk/ukim/finki/busngo/model/enums/VOZENJE_STATUS.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/enums/VOZENJE_STATUS.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/java/mk/ukim/finki/busngo/model/enums/VOZENJE_STATUS.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,6 @@
+package mk.ukim.finki.busngo.model.enums;
+
+public enum VOZENJE_STATUS {
+    ACTIVE,
+    FINISHED
+}
Index: src/main/resources/application.properties
===================================================================
--- src/main/resources/application.properties	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/main/resources/application.properties	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,11 @@
+
+spring.datasource.url=jdbc:postgresql://localhost:5432/db_202324z_va_prj_busngo
+
+spring.datasource.hikari.connection-timeout=20000
+spring.datasource.hikari.maximum-pool-size=5
+
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
+spring.jpa.properties.hibernate.jdbc.non_contextual_creation=true
+
+spring.jpa.hibernate.ddl-auto=validate
+spring.jpa.show-sql=true
Index: src/test/java/mk/ukim/finki/busngo/BusNGoApplicationTests.java
===================================================================
--- src/test/java/mk/ukim/finki/busngo/BusNGoApplicationTests.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
+++ src/test/java/mk/ukim/finki/busngo/BusNGoApplicationTests.java	(revision 24c39f958d6dc4a916ce04381e57b26a8163a342)
@@ -0,0 +1,13 @@
+package mk.ukim.finki.busngo;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class BusNGoApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}
