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