Changes between Version 1 and Version 2 of AdvancedApplicationDevelopment


Ignore:
Timestamp:
09/13/25 21:07:11 (2 days ago)
Author:
211228
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedApplicationDevelopment

    v1 v2  
    11= Напреден апликативен развој =
     2
     3Имплементирани се сите сценарија од фаза 3 со дополнителни подобрувања како: [[br]]
     4Подобрување на начинот на избор на доделување на соба од страна на вработениот доколку студентот нема посебно барање за соба сега не е по случаен избор туку вработениот има уреден преглед до капацитетот на блоковите, спратовите, и зафатеност на соби ( дали се резервирани или не ) и врз основа на тоа го сместува студентот.
     5За ова подобрување е додадена само една нова колона во табелата Block ( total_rooms ) која ја искористив за пресметка на капацитет по спратовите во блокот [[br]]
     6
     7Имплементирана е нова функционалност која не е дефинирана во фаза 3 а тоа е можност за барање на прекин на престој во собата од страна на студентот. [[br]]
     8За оваа функционалност се додадени две нови колони во StudentTookRoom (end_stay_requested од тип boolean и requested_end_date од тип date)
     9 
     10== Тригери
     11
     12Автоматско зголемување на капацитет на собата доколку има внесено краен датум на собата во која престојувал.
     13
     14
     15{{{
     16CREATE OR REPLACE FUNCTION update_room_on_end_stay()
     17RETURNS TRIGGER AS $$
     18BEGIN
     19    IF NEW.end_date IS NOT NULL THEN
     20        UPDATE project.room
     21        SET project.capacity = capacity + 1,
     22            project.is_available = TRUE
     23        WHERE project.room_number = NEW.room_num
     24          AND project.block_id = NEW.block_id::char(1);
     25    END IF;
     26
     27    RETURN NEW;
     28END;
     29$$ LANGUAGE plpgsql;
     30
     31CREATE TRIGGER trg_update_room_on_end_stay
     32AFTER UPDATE OF end_date
     33ON project.studenttookroom
     34FOR EACH ROW
     35EXECUTE FUNCTION update_room_on_end_stay();
     36}}}
     37
     38
     39Автоматско менување на статусот на собата доколку некој од прегледаните документи се со статус Declined
     40
     41
     42{{{
     43CREATE OR REPLACE FUNCTION update_room_request_on_doc_decline()
     44RETURNS TRIGGER AS $$
     45BEGIN
     46    IF NEW.d_status = 'Declined' THEN
     47        UPDATE roomrequest
     48        SET status = 'Declined'
     49        WHERE student_id = NEW.student_id
     50    END IF;
     51
     52    RETURN NEW;
     53END;
     54$$ LANGUAGE plpgsql;
     55
     56CREATE TRIGGER trg_update_room_request
     57AFTER UPDATE OF d_status
     58ON dorm_document
     59FOR EACH ROW
     60EXECUTE FUNCTION update_room_request_on_doc_decline();
     61}}}
     62
     63
     64
     65
     66== Трансакции
     67
     68Апликацијата користи трансакции во следните два фајла: [[br]]
     69
     70За доделување на соба на студентот
     71src/main/java/org/example/dormallocationsystem/Service/Impl/EmployeeServiceImpl.java
     72
     73За плаќање на станарината за месец.
     74src/main/java/org/example/dormallocationsystem/Service/Impl/PaymentServiceImpl.java
     75
     76
     77== Индекси
     78
     79Бидејќи PostgresSQL има систем за креирање на индекси самостојно, во некои случаи каде одредени прашалници беа користени по често немаше потреба да креирам индекс, но во следните два случаеви PostgresSQL
     80користеше секвенцијален scan (односно пребаруваше низ целата табела) во следниве два прашалниците кои се често употребуваат и исто така може значително да ја влијаат на перформансите доколку има повеќе податоци во нив:
     81=== Случај 1.
     82Употребуван прашалник за преглед на документите на студентот:
     83
     84{{{
     85select *
     86from project.dorm_document
     87where student_id = [id];
     88}}}
     89
     90Анализа пред креиран индекс [[br]]
     91Слика 1.
     92
     93
     94Креиран индекс:
     95
     96{{{
     97create index idx_dorm_document_student_id on project.dorm_document(student_id);
     98}}}
     99
     100Анализа после креиран индекс [[br]]
     101Слика 2.
     102
     103=== Случај 2.
     104
     105Употребуван прашалник за преглед на уплатената станарина од страна на студент
     106
     107{{{
     108select distinct s.u_id, s.faculty_name, s.gender, s.is_exempt, s.year_of_studies
     109from project.student s
     110where exists (
     111    select 1
     112    from project.payment p
     113    where s.u_id = p.student_id
     114);
     115}}}
     116
     117Анализа пред креиран индекс [[br]]
     118Слика 1.
     119
     120Креиран индекс:
     121{{{
     122create index idx_payment_student_id on project.payment(student_id);
     123}}}
     124
     125Анализа после креиран индекс [[br]]
     126Слика 2.
     127
     128
     129== Напредни прашалници
     130
     131Имплементирани се прашалниците за [[br]]
     132
     133Бројка на соби кои поради претходна зафатеност не се доделени на студентите кои ги побарале [[br]]
     134И извештај за блокот
     135
     136[[slika-prasalnici]]
     137
     138
     139Истите се наоѓаат во **src/main/java/org/example/dormallocationsystem/Web/EmployeeController.java** фајлот
     140
     141{{{
     142    @GetMapping("/dashboard")
     143    public String employeeDashboard(@RequestParam Long employeeId, Model model) {
     144        List<Student> studentsAddedToRoom = studentService.getStudentsAddedToRoom();
     145        List<Student> studentsThatNeedToBeReviewed = studentService.getStudentsWithNotReviewedDocs();
     146        List<Studenttookroom> endStayRequests = studentTookRoomService.getPendingEndStayRequests();
     147        List<BlockRoomReportDTO> blockReport = blockService.getBlockRoomReport();
     148        List<RoomMismatchDTO> roomMismatches = roomRequestService.findRoomMismatches();
     149
     150        model.addAttribute("employeeId", employeeId);
     151        model.addAttribute("addedToRoomStudents", studentsAddedToRoom);
     152        model.addAttribute("studentsToReview", studentsThatNeedToBeReviewed);
     153        model.addAttribute("endStayRequests", endStayRequests);
     154        model.addAttribute("blockReport", blockReport);
     155        model.addAttribute("roomMismatches", roomMismatches);
     156
     157        return "employee-dashboard";
     158    }
     159}}}
     160