Changes between Initial Version and Version 1 of Views


Ignore:
Timestamp:
01/29/26 21:16:48 (10 days ago)
Author:
233194
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Views

    v1 v1  
     1== Views ==
     2
     3=== 1) View for Approved Builds Page ===
     4
     5**Purpose:** \\
     6-Shows all the approved builds built by users, sorted by price by default \\
     7-Calculates average ratings for each build, so the user can compare the builds with that metric. \\
     8-Includes all data needed for filtering (name search using the build names) and sorting (by price, rating and date). \\
     9{{{
     10CREATE OR REPLACE VIEW v_approved_builds_browse AS
     11SELECT
     12    b.id,
     13    b.user_id,
     14    b.name,
     15    b.created_at,
     16    b.total_price,
     17    u.username AS creator_username,
     18    COUNT(DISTINCT fb.user_id) AS favorite_count,
     19    COUNT(DISTINCT rb.user_id) AS total_ratings,
     20    COALESCE(AVG(rb.value::float), 0) AS avg_rating,
     21    COUNT(DISTINCT r.id) AS review_count
     22FROM build b
     23JOIN users u ON u.id = b.user_id
     24LEFT JOIN favorite_build fb ON fb.build_id = b.id
     25LEFT JOIN rating_build rb ON rb.build_id = b.id
     26LEFT JOIN review r ON r.build_id = b.id
     27WHERE b.is_approved = TRUE
     28GROUP BY b.id, b.user_id, b.name, b.created_at, b.total_price, u.username;
     29}}}
     30
     31=== 2) View for User Dashboard ===
     32**Purpose:** \\
     33-Shows the user's created builds with their metrics \\
     34-Shows the user's favorited builds from other creators \\
     35-Combines data from both queries to one view \\
     36-Includes average ratings for all the builds displayed \\
     37{{{
     38CREATE OR REPLACE VIEW v_user_dashboard_data AS
     39WITH user_created_builds AS (
     40    SELECT
     41        b.id AS build_id,
     42        b.user_id AS dashboard_user_id,
     43        b.user_id AS creator_id,
     44        u.username AS creator_username,
     45        b.name,
     46        b.created_at,
     47        b.total_price,
     48        b.is_approved,
     49        'created' AS build_source,
     50        COALESCE(AVG(rb.value::float), 0) AS avg_rating,
     51        COUNT(DISTINCT rb.user_id) AS rating_count
     52    FROM build b
     53    JOIN users u ON u.id = b.user_id
     54    LEFT JOIN rating_build rb ON rb.build_id = b.id
     55    GROUP BY b.id, b.user_id, u.username, b.name, b.created_at, b.total_price, b.is_approved
     56),
     57user_favorited_builds AS (
     58    SELECT
     59        b.id AS build_id,
     60        fb.user_id AS dashboard_user_id,
     61        b.user_id AS creator_id,
     62        u.username AS creator_username,
     63        b.name,
     64        b.created_at,
     65        b.total_price,
     66        b.is_approved,
     67        'favorited' AS build_source,
     68        COALESCE(AVG(rb.value::float), 0) AS avg_rating,
     69        COUNT(DISTINCT rb.user_id) AS rating_count
     70    FROM favorite_build fb
     71    JOIN build b ON b.id = fb.build_id
     72    JOIN users u ON u.id = b.user_id
     73    LEFT JOIN rating_build rb ON rb.build_id = b.id
     74    GROUP BY b.id, fb.user_id, b.user_id, u.username, b.name, b.created_at, b.total_price, b.is_approved
     75)
     76SELECT * FROM user_created_builds
     77UNION ALL
     78SELECT * FROM user_favorited_builds;
     79}}}
     80
     81=== 3) View for Build Details Page ===
     82**Purpose:** \\
     83-Pre-joins build with the creator's username \\
     84-Aggregates rating statistics \\
     85-Counts reviews and favorites for the build \\
     86{{{
     87CREATE OR REPLACE VIEW v_build_details_summary AS
     88SELECT
     89    b.id AS build_id,
     90    b.user_id,
     91    b.name,
     92    b.created_at,
     93    b.description,
     94    b.total_price,
     95    b.is_approved,
     96    u.username AS creator_username,
     97    COALESCE(AVG(rb.value::float), 0) AS average_rating,
     98    COUNT(DISTINCT rb.user_id) AS rating_count,
     99    COUNT(DISTINCT r.id) AS review_count,
     100    COUNT(DISTINCT fb.user_id) AS favorite_count
     101FROM build b
     102JOIN users u ON u.id = b.user_id
     103LEFT JOIN rating_build rb ON rb.build_id = b.id
     104LEFT JOIN review r ON r.build_id = b.id
     105LEFT JOIN favorite_build fb ON fb.build_id = b.id
     106GROUP BY b.id, b.user_id, b.name, b.created_at, b.description,
     107         b.total_price, b.is_approved, u.username;
     108}}}
     109
     110=== 4) View for Admin Dashboard ===
     111**Purpose:** \\
     112-Shows component and build suggestions waiting for approval or rejection \\
     113-Shows user information for both builds and components \\
     114-Provides data for the admin verification queue \\
     115{{{
     116CREATE OR REPLACE VIEW v_admin_pending_items AS
     117WITH pending_builds AS (
     118    SELECT
     119        b.id,
     120        'build' AS item_type,
     121        b.user_id,
     122        u.username,
     123        u.email,
     124        b.name AS item_name,
     125        b.description,
     126        b.created_at AS submitted_date,
     127        b.total_price,
     128        NULL AS component_type,
     129        NULL AS link,
     130        'pending' AS status
     131    FROM build b
     132    JOIN users u ON u.id = b.user_id
     133    WHERE b.is_approved = FALSE
     134),
     135pending_suggestions AS (
     136    SELECT
     137        s.id,
     138        'suggestion' AS item_type,
     139        s.user_id,
     140        u.username,
     141        u.email,
     142        s.component_type AS item_name,
     143        s.description,
     144        NULL::DATE AS submitted_date,
     145        NULL::NUMERIC AS total_price,
     146        s.component_type,
     147        s.link,
     148        s.status
     149    FROM suggestions s
     150    JOIN users u ON u.id = s.user_id
     151    WHERE s.status = 'pending'
     152)
     153SELECT * FROM pending_builds
     154UNION ALL
     155SELECT * FROM pending_suggestions
     156ORDER BY item_type, id DESC;
     157}}}