wiki:Views

Погледи

Детали за договори за изнајмување

CREATE OR REPLACE VIEW domify.LeaseDetailsView AS
SELECT 
    L.id AS lease_id,
    L.start_date,
    L.end_date,
    L.rent_amount,
    L.deposit_amount,
    
    Li.id AS listing_id,
    Li.title AS listing_title,
    Li.description AS listing_description,
    Li.status AS listing_status,
    
    U.id AS unit_id,
    U.unit_number,
    U.floor,
    U.area_sq_m,
    
    P.id AS property_id,
    P.title AS property_title,
    PT.name AS property_type,
    
    A.street,
    A.number,
    A.municipality,
    A.city,
    A.country,
    
    T.id AS tenant_id,
    TU.first_name AS tenant_first_name,
    TU.last_name AS tenant_last_name,
    TU.rating AS tenant_rating,
    
    LL.id AS landlord_id,
    LU.first_name AS landlord_first_name,
    LU.last_name AS landlord_last_name,
    LU.rating AS landlord_rating,
    
    (SELECT ARRAY_AGG(image) FROM domify.UnitImage WHERE unit_id = U.id) AS unit_images,
    
    CASE 
        WHEN CURRENT_DATE BETWEEN L.start_date AND L.end_date 
        THEN (L.end_date - CURRENT_DATE)
        ELSE NULL
    END AS days_remaining

FROM domify.Lease L
JOIN domify.Listing Li ON L.listing_id = Li.id
JOIN domify.Unit U ON Li.unit_id = U.id
JOIN domify.Property P ON U.property_id = P.id
JOIN domify.PropertyType PT ON P.property_type_id = PT.id
JOIN domify.Address A ON P.address_id = A.id
JOIN domify.TenantProfile T ON L.tenant_id = T.id
JOIN domify.UserD TU ON T.id = TU.id
JOIN domify.LandlordProfile LL ON L.landlord_id = LL.id
JOIN domify.UserD LU ON LL.id = LU.id;
  • Прикажува целосни информации за изнајмување: детали за изнајмувањето, станарот, сопственикот, имотот, листингот, адресата и останатите слики. Пресметува и колку денови остануваат до крај на договорот.
  • Корисен е кога сакаме да имаме централизиран приказ на сите потребни податоци за еден договор.

Активни слободни огласи

CREATE OR REPLACE VIEW domify.ActiveListingsView AS
SELECT 
    L.id AS listing_id,
    L.title,
    U.rent_amount,
    A.city,
    A.municipality,
    CONCAT(A.street, ' ', A.number, ', ', A.municipality, ', ', A.city) AS display_address,
    PT.name AS property_type,
    UI.image AS unit_image
FROM domify.Listing L
JOIN domify.Unit U ON L.unit_id = U.id
JOIN domify.Property P ON U.property_id = P.id
JOIN domify.PropertyType PT ON P.property_type_id = PT.id
JOIN domify.Address A ON P.address_id = A.id
LEFT JOIN domify.UnitImage UI ON U.id = UI.unit_id
WHERE L.status = 'слободно';
  • Прикажува тековни активни/слободни огласи со клучни информации: наслов, кирија, адреса, тип на имот и слика.
  • Корисен за брзо пребарување и прикажување на слободни огласи за изнајмување.

Заинтересирани станари за оглас

CREATE OR REPLACE VIEW domify.InterestedTenantsView AS
SELECT 
    I.listing_id,
    L.title AS listing_title,
    TP.id AS tenant_id,
    UT.first_name,
    UT.last_name,
    UT.email,
    UT.rating,
    UT.bio,
    AT.city AS tenant_city,
    AT.municipality AS tenant_municipality
FROM domify.Interested I
JOIN domify.Listing L ON I.listing_id = L.id
JOIN domify.TenantProfile TP ON I.tenant_profile_id = TP.id
JOIN domify.UserD UT ON TP.id = UT.id
JOIN domify.Address AT ON UT.address_id = AT.id;
  • Прикажува кои станари се заинтересирале за одреден оглас, заедно со нивните лични податоци, рејтинг и адреса.
  • Сопствениците можат да ги видат потенцијалните станари и полесно да изберат кому да изнајмат.

Детали за огласи за изнајмување

CREATE OR REPLACE VIEW domify.ListingDetailsView AS
SELECT 
    L.id AS listing_id,
    L.title,
    L.description,
    L.available_from,
    L.available_to,
    L.status, 
    U.id AS unit_id,
    U.unit_number,
    U.floor,
    U.bedrooms,
    U.bathrooms,
    U.area_sq_m,
    U.rent_amount,
    P.id AS property_id,
    P.title AS property_title,
    P.description AS property_description,
    PT.name AS property_type,
    OU.first_name, 
    OU.last_name,
    A.street,
    A.number,
    A.municipality,
    A.city,
    A.country,
    U.rent_amount * 2 AS deposit_amount,
    COALESCE(interest_count.count, 0) AS interested_count,
    ARRAY_AGG(UI.image) FILTER (WHERE UI.image IS NOT NULL) AS unit_images
FROM domify.Listing L
JOIN domify.Unit U ON L.unit_id = U.id
JOIN domify.Property P ON U.property_id = P.id
JOIN domify.PropertyType PT ON P.property_type_id = PT.id
JOIN domify.Address A ON P.address_id = A.id
JOIN domify.UserD OU ON P.owner_id = OU.id
LEFT JOIN domify.UnitImage UI ON U.id = UI.unit_id
LEFT JOIN (
    SELECT listing_id, COUNT(*) as count
    FROM domify.Interested
    GROUP BY listing_id
) interest_count ON L.id = interest_count.listing_id
GROUP BY L.id, L.title, L.description, L.available_from, L.available_to, L.status,
         U.id, U.unit_number, U.floor, U.bedrooms, U.bathrooms, U.area_sq_m, U.rent_amount,
         P.id, P.title, P.description, PT.name, OU.first_name, OU.last_name,
         A.street, A.number, A.municipality, A.city, A.country,
         interest_count.count;
  • Прикажува детални информации за огласите: единицата, имотот, сопственикот, адресата, депозитот, број на заинтересирани станари и сите слики.
  • Дава целосна слика за огласот на едно место, со што станарите и сопствениците добиваат комплетни информации.
Last modified 7 hours ago Last modified on 08/19/25 23:18:05
Note: See TracWiki for help on using the wiki.