📁 Struktura souborů
🗄️ Databázové schéma
Struktura souborů

Kliknutím na sekci rozbalíte seznam souborů. Každý soubor obsahuje popis jeho účelu.

⚙️ app/Core/ 8 souborů
Application.phpBootstrapper – registrace všech routes, DI kontejner, spuštění routeruCore
Router.phpURL router – párování cest s controllery, podpora parametrů {id:\d+}Core
BaseController.phpRodičovský controller – render(), redirect(), post(), get(), requireLogin(), verifyCsrf()Core
Database.phpPDO wrapper – query(), queryOne(), execute(), insert(), paginate(), updateRow()Core
View.phpTwig renderer – inicializace Twig, cache v var/cache/twig/, globální proměnnéCore
Session.phpSession wrapper – flash zprávy, CSRF token, správa sessionCore
Lang.phpPřekladač – načítání překladů z DB, fallback na výchozí hodnotuCore
Container.phpDI kontejner – singleton instance DB, View, Lang, SessionCore
HttpException.phpVýjimka pro HTTP chyby (404, 403, 500)Core
🌐 Controllers/Front/ 11 souborů
HomeController.phpHlavní stránka – statistiky portálu, výpis inzerátů, vyhledáváníController
JobController.phpDetail firemního inzerátu – zobrazení, SEO meta, podobné poziceController
UpJobController.phpDetail inzerátu Úřadu práce – zobrazení dat importovaných z ÚP APIController
ApplicationController.phpPodání přihlášky na firemní inzerát – validace, upload CV, odeslání mailuController
UpApplicationController.phpPodání přihlášky na inzerát ÚP – stejný flow, odesílá na kontakt ÚPController
EmployersController.phpStránka Zaměstnavatelé – grid firem + mapa s GPS souřadnicemi z DBController
ForCompaniesController.phpLanding page „Pro firmy" – ceník, výhody, CTA registraceController
SitemapController.phpXML sitemap – generuje sitemap.xml pro vyhledávačeController
LangController.phpPřepnutí jazyka portálu – uloží volbu do sessionController
PrivacyController.phpStránka GDPR / Zásady ochrany osobních údajůController
TermsController.phpStránka Podmínky užíváníController
🔐 Controllers/Auth/ 4 soubory
LoginController.phpPřihlášení firmy – ověření hesla, vytvoření sessionController
RegisterController.phpRegistrace firmy – validace, hash hesla, vytvoření záznamu v companiesController
PasswordController.phpReset hesla – vygenerování tokenu, odeslání mailu, nastavení nového heslaController
AuthController.phpOdhlášení – zrušení sessionController
🏢 Controllers/Company/ 7 souborů
DashboardController.phpPřehled firmy – statistiky inzerátů, reakcí, stav peněženkyController
JobController.phpSpráva inzerátů – CRUD, aktivace/deaktivace, přehled přihlášekController
ApplicationsController.phpPřehled přihlášek na inzeráty firmy – detail uchazeče, změna stavuController
ProfileController.phpProfil firmy – editace údajů, logo, geocoding adresy přes NominatimController
WalletController.phpPeněženka – stav kreditu, dobití převodem, Stripe Checkout, webhookController
WalletPdfController.phpGenerování PDF zálohové faktury pro bankovní převodController
InvoicesController.phpFaktury firmy – přehled, stažení PDF z iDokladu, manuální sync stavuController
🛡️ Controllers/Admin/ 10 souborů
AuthController.phpPřihlášení/odhlášení adminaController
DashboardController.phpAdmin dashboard – statistiky, přehled nových registrací a přihlášekController
CompanyController.phpSpráva firem – přehled, editace, aktivace/deaktivace, nastavení is_paidController
JobController.phpSpráva inzerátů – přehled všech, topování, editace, smazáníController
UpJobController.phpSpráva inzerátů ÚP – přehled, ruční import, smazání starýchController
ApplicationsController.phpPřehled všech přihlášek napříč firmamiController
WalletController.phpSpráva peněženek – přehled objednávek, párování bankovních platebController
HashtagController.phpSpráva hashtagů – regiony, státy, typy úvazkuController
TranslationController.phpSpráva překladů portálových textů – inline editaceController
ConsentController.phpSpráva GDPR souhlasů – přehled, exportController
PartnerController.phpSpráva partnerů/spolupráce – CRUD pro sekci na homepageController
📦 app/Models/ 9 souborů
Company.phpCRUD pro tabulku companies – findById, update, create, listAll, setPaidModel
Job.phpInzeráty – vytvoření, aktualizace, filtrování, výpis s hashtagy, topováníModel
UpJob.phpInzeráty Úřadu práce – import, vyhledávání, mazání prošlýchModel
Application.phpPřihlášky – vytvoření, změna stavu, výpis dle firmy/inzerátuModel
Wallet.phpPeněženka – kredit, wallet_orders, stripe_orders, addCredit, matchOrder, completeStripeOrderModel
Invoice.phpFaktury – lokální kopie z iDokladu, stažení PDF, sync stavu platbyModel
Hashtag.phpHashtagy – načítání kategorií, aktivní hashtagy pro select boxyModel
Translation.phpPřeklady – načítání, ukládání překladů dle jazyka a klíčeModel
Partner.phpPartneři – CRUD pro sekci spolupráce na homepageModel
🔧 app/Services/ 4 soubory
MailService.phpPHPMailer wrapper – reset hesla, notifikace přihlášky (firemní i ÚP), grafické HTML šablonyService
IDokladService.phpiDoklad API v3 – OAuth token (cache), vystavení faktury, PDF, sync stavu platby, odeslání e-mailemService
GeocodingService.phpOpenStreetMap Nominatim – geocoding adresy firmy na GPS souřadnice (lat/lng)Service
AiCandidateService.phpAI analýza uchazeče – volání Claude API, vyhodnocení CV a průvodního dopisu vůči inzerátuService
🛠️ app/Helpers/ 3 soubory
Validator.phpValidace formulářových dat – required, email, min/max délka, výpis chybHelper
Upload.phpNahrávání souborů – CV PDF, logo firmy, validace typu a velikostiHelper
Str.phpPomocné textové funkce – slug, truncate, highlightHelper
🎨 templates/layouts/ 3 soubory
public.twigHlavní layout pro veřejné stránky – navigace, footer, meta tagy, OGTwig
company.twigLayout firemního portálu – sidebar navigace (Dashboard, Inzeráty, Reakce, Peněženka, Faktury, Profil)Twig
admin.twigAdmin layout – top navigace, přístup pouze pro adminyTwig
📄 templates/public/ 8 souborů
home.twigHlavní stránka – hero, vyhledávání, statistiky, výpis inzerátů, partneřiTwig
job-detail.twigDetail firemního inzerátu – popis, formulář přihlášky, podobné poziceTwig
up-job-detail.twigDetail inzerátu ÚP – přizpůsobený layout pro data z Úřadu práceTwig
search.twigVýsledky vyhledávání – filtry, výpis, stránkováníTwig
employers.twigZaměstnavatelé – grid firem, interaktivní mapa Leaflet s filtrem zemíTwig
for-companies.twigLanding page pro firmy – ceník, výhody, CTATwig
privacy.twigGDPR / Zásady ochrany osobních údajůTwig
terms.twigPodmínky užíváníTwig
error.twigChybová stránka – 404, 500Twig
🏗️ templates/company/ 10 souborů
dashboard.twigDashboard firmy – přehled statistik, rychlé akceTwig
profile.twigProfil firmy – formulář pro editaci údajů a logaTwig
jobs/index.twigSeznam inzerátů firmy – stav, počet reakcí, akceTwig
jobs/form.twigFormulář inzerátu – název, popis (WYSIWYG), hashtagy, vlastní tagyTwig
applications/index.twigPřehled přihlášek – filtr, stav uchazečeTwig
applications/detail.twigDetail přihlášky – kontakt, CV odkaz, AI analýza, změna stavuTwig
wallet/index.twigPeněženka – stav kreditu, dobití převodem nebo kartou (Stripe)Twig
wallet/order.twigDetail objednávky bankovního převodu – QR platba, instrukceTwig
wallet/stripe_success.twigPotvrzení Stripe platby – stav, připsaný kreditTwig
invoices/index.twigFaktury – přehled, stav úhrady, tlačítko PDF a sync s iDoklademTwig
🔑 templates/admin/ 17 souborů
login.twigPřihlášení adminaTwig
dashboard.twigAdmin přehled – klíčové metriky, poslední aktivityTwig
companies/index.twigSeznam firem – filtr, stav, platební nastaveníTwig
companies/edit.twigEditace firmy – všechna pole, is_active, is_paid, is_topTwig
jobs/index.twigSpráva inzerátů – přehled všech, filtr, topováníTwig
jobs/edit.twigEditace inzerátu adminemTwig
up_jobs/index.twigInzeráty ÚP – přehled importovanýchTwig
up_jobs/import.twigRuční import z ÚP API – výběr parametrů, spuštěníTwig
up_jobs/edit.twigEditace inzerátu ÚPTwig
wallets/index.twigPeněženky – přehled zůstatků všech firemTwig
wallets/detail.twigDetail peněženky firmy – pohyby, kredityTwig
wallets/orders.twigObjednávky bankovních převodů – párování platebTwig
wallets/accounts.twigBankovní účty – konfigurace čísel účtů pro platbyTwig
wallets/prices.twigCeník kreditů – nastavení balíčků a cenTwig
hashtags/index.twigSpráva hashtagů – regiony, státy, typy úvazkuTwig
translations/index.twigPřeklady portálu – inline editace textů dle jazykaTwig
consents/index.twigGDPR souhlasy – přehled, exportTwig
partners/ (2)Správa partnerů/spolupráce – index + edit formulářTwig
applications/index.twigPřehled všech přihlášek napříč firmamiTwig
cron/ 4 soubory
up_import.phpImport inzerátů z Úřadu práce ČR API – spouštět každé 2 hodinyCron
wallet_daily.phpDenní kontrola bankovních plateb – automatické párování dle VSCron
invoice_sync.phpSync stavu faktur z iDokladu – kontrola uhrazení, spouštět každé 2 hodinyCron
geocode_companies.phpJednorázový geocoding firem bez GPS souřadnic – Nominatim API, 1 req/sCron
Databázové schéma

MariaDB / InnoDB · utf8mb4 · Kliknutím na tabulku rozbalíte sloupce.

PK – primární klíč
FK – cizí klíč
Běžný sloupec

Klíčové vztahy

companies1 → ∞jobsFirma má mnoho inzerátů
jobs1 → ∞applicationsInzerát má mnoho přihlášek
jobs1 → ∞job_custom_tagsInzerát má vlastní hashtagy
companies1 → ∞walletsFirma má peněženku s pohyby
companies1 → ∞wallet_ordersFirma má objednávky bankovních převodů
companies1 → ∞stripe_ordersFirma má Stripe platby kartou
companies1 → ∞invoicesFirma má faktury (lokální kopie z iDokladu)
hashtag_categories1 → ∞hashtagsKategorie obsahuje hashtagy (region, country, position_type)
jobsN → 1hashtagsInzerát má region_id, country_id, position_type_id
languages1 → ∞translationsJazyk má překlady portálových textů
companies Registrované firmy
idINT UNSIGNED PKAuto increment
emailVARCHAR(160) UNIQUEPřihlašovací e-mail
password_hashVARCHAR(255)bcrypt
password_reset_tokenVARCHAR(100)Reset hesla
company_nameVARCHAR(160)Název firmy
street / city / zipVARCHARFakturační adresa
countryVARCHAR(80)Stát (text)
lat / lngDECIMAL(10,7)GPS – Nominatim
geocoded_atDATETIMEKdy proběhl geocoding
ico / dicVARCHARIČO / DIČ
billing_emailVARCHAR(160)Fakturační e-mail
contact_phone/email/webVARCHARVeřejné kontakty
aboutTEXTPopis firmy
logo_pathVARCHAR(255)Cesta k logu
is_paidTINYINT(1)Platí za inzeráty
is_top / top_untilTINYINT / DATETIMETopování profilu
is_active / is_deletedTINYINT(1)Stav účtu
stripe_customer_idVARCHAR(100)Stripe CID
jobs Firemní inzeráty
idINT UNSIGNED PK
company_idINT → companiesFK
titleVARCHAR(200)Název pozice
descriptionLONGTEXTHTML obsah
region_idSMALLINT → hashtagsFK region
country_idSMALLINT → hashtagsFK stát
position_type_idSMALLINT → hashtagsFK typ úvazku
is_active / is_deletedTINYINT(1)Stav inzerátu
is_top / top_untilTINYINT / DATETIMETopování
published_at / expires_atDATETIMEPlatnost
job_custom_tags Vlastní tagy inzerátů
idINT UNSIGNED PK
job_idINT → jobsFK CASCADE
tagVARCHAR(80)Volný text tagu
applications Přihlášky uchazečů
idINT UNSIGNED PK
job_idINT → jobsFK
company_idINT → companiesDenormalizováno
first_name / last_nameVARCHAR(100)Uchazeč
email / phoneVARCHARKontakt
messageTEXTPrůvodní dopis
cv_pathVARCHAR(255)Cesta k PDF CV
linkedin_urlVARCHAR(255)LinkedIn profil
statusENUMnew/seen/shortlisted/rejected
ai_analysisTEXTClaude AI vyhodnocení
up_jobs Inzeráty Úřadu práce
idINT UNSIGNED PK
up_idVARCHAR(50) UNIQUEID z ÚP API
titleVARCHAR(255)Název pozice
employer_nameVARCHAR(255)Název zaměstnavatele
descriptionLONGTEXTPopis pozice
location / regionVARCHARMísto výkonu
contact_*VARCHARKontaktní údaje ÚP
valid_untilDATEPlatnost inzerátu
raw_dataJSONOriginální JSON z API
wallets Zůstatky peněženek
idINT UNSIGNED PK
company_idINT → companies UNIQUE1:1 s firmou
balanceDECIMAL(10,2)Aktuální zůstatek
currencyVARCHAR(3)CZK / EUR
is_activeTINYINT(1)Aktivní peněženka
wallet_transactions Pohyby na peněžence
idINT UNSIGNED PK
company_idINT → companiesFK
typeENUMcredit / debit
amountDECIMAL(10,2)Částka pohybu
descriptionVARCHAR(255)Popis pohybu
ref_type / ref_idVARCHAR / INTOdkaz na zdroj
idoklad_invoice_*INT / VARCHARFaktura v iDokladu
wallet_orders Objednávky bank. převodů
idINT UNSIGNED PK
company_idINT → companiesFK
amount / currencyDECIMAL / VARCHARPožadovaná částka
variable_symbolVARCHAR(10) UNIQUEVS pro párování
statusENUMpending/matched/cancelled
matched_at / matched_byDATETIME / VARCHARAdmin párování
idoklad_invoice_*INT / VARCHARFaktura v iDokladu
stripe_orders Platby kartou – Stripe
idINT UNSIGNED PK
company_idINT → companiesFK CASCADE
amount / currencyDECIMAL / VARCHARČástka platby
statusENUMpending/paid/cancelled
stripe_session_idVARCHAR(255)Checkout Session ID
stripe_payment_intentVARCHAR(255)Payment Intent ID
paid_atDATETIMEČas uhrazení
idoklad_invoice_*INT / VARCHARFaktura v iDokladu
invoices Faktury – lokální kopie
idINT UNSIGNED PK
company_idINT → companiesFK CASCADE
idoklad_invoice_idINT UNIQUEID v iDokladu
invoice_numberVARCHAR(50)Číslo faktury
amount / currencyDECIMAL / VARCHARFakturovaná částka
statusENUMunpaid/paid/cancelled
issued_at / due_at / paid_atDATEKlíčová data
pdf_pathVARCHAR(255)Lokální PDF soubor
ref_type / ref_idVARCHAR / INTstripe_order / wallet_order
synced_atDATETIMEPoslední sync iDoklad
hashtags + categories Filtrovací hashtagy
hashtag_categories
idTINYINT PK
slugVARCHAR(40) UNIQUEregion/country/position_type
hashtags
idSMALLINT PK
category_idTINYINT → categoriesFK
slugVARCHAR(80) UNIQUEURL-friendly
labelVARCHAR(100)Zobrazovaný text
is_active / sort_orderTINYINT / SMALLINTPořadí, viditelnost
languages + translations Lokalizace portálu
languages
idTINYINT PK
codeVARCHAR(10) UNIQUEcs / sk / en
is_default / is_activeTINYINT(1)Výchozí jazyk
translations
idINT PK
language_idTINYINT → languagesFK CASCADE
translation_keyVARCHAR(200)nav.add_offer, ...
valueTEXTPřeložený text
admins Administrátoři portálu
idINT PK
emailVARCHAR(160) UNIQUEPřihlašovací e-mail
password_hashVARCHAR(255)bcrypt
nameVARCHAR(100)Zobrazované jméno
roleENUMsuperadmin / admin
is_activeTINYINT(1)Aktivní účet
last_login_atDATETIMEPoslední přihlášení
partners Partneři / spolupráce
idINT PK
nameVARCHAR(160)Název partnera
logo_pathVARCHAR(255)Logo
urlVARCHAR(255)Web partnera
descriptionTEXTPopis spolupráce
is_active / sort_orderTINYINT / INTPořadí, viditelnost