You are on page 1of 281

MINISTRY OF EDUCATION AND TRAINING

FPT UNIVERSITY

Capstone Project

Project title: Creative Inside


Jgeek group
Supervisor Phan Trường Lâm
Vũ Việt Anh - SE04447
Đỗ Duy Tân - SE04433
Group member
Nguyễn Văn Tú - SE04009
Phạm Đình Mai - SE04409
Project code ATTM

1
Table of Contents
Table of Contents..................................................................................................................................2
Acknowledgements...............................................................................................................................6
Definitions and Acronyms......................................................................................................................7
Chapter 1 - Introduction.....................................................................................................................9
1.1 Purpose..................................................................................................................................9
1.2 Project information................................................................................................................9
1.3 The people.............................................................................................................................9
1.4 Background............................................................................................................................9
1.5 The problem........................................................................................................................10
1.6 Literature review.................................................................................................................10
1.7 The Proposal system............................................................................................................11
1.7.1 Our Ideas......................................................................................................................11
1.7.2 The proposal................................................................................................................12
1.7.3 System group functions...............................................................................................12
Chapter 2 : Project Management Plan..............................................................................................13
2.1 Purpose................................................................................................................................13
2.2 Software process model......................................................................................................13
2.2.1 About the iterative model............................................................................................13
2.2.2 Advantages and disadvantages considering.................................................................14
2.3 Organization structure.........................................................................................................14
2.4 Roles and responsibilities.....................................................................................................14
2.5 Tools and techniques...........................................................................................................15
2.6 Project management plan....................................................................................................15
2.6.1 Project schedule...........................................................................................................15
2.6.2 Meeting minutes..........................................................................................................16
2.6.3 Risk Management Plan.................................................................................................17
2.6.4 Communication Plan....................................................................................................18
2.6.5 Coding convention.......................................................................................................19
Chapter 3 - Software Requirements Specification...........................................................................20
3.1 Purpose................................................................................................................................20
3.2 Definitions, acronyms, and abbreviations............................................................................20

2
3.3 User requirement specification...........................................................................................21
3.3.1 Business process diagram of creating a CI-Project.......................................................21
3.3.2 CI-project state diagram..............................................................................................22
3.3.3 Rating designer............................................................................................................23
3.4 System requirement specification.......................................................................................23
3.5 Functional specification.......................................................................................................23
3.5.1 Business rule repository...............................................................................................23
3.5.2 Use case diagram.........................................................................................................24
3.5.3 Use case list..................................................................................................................25
3.5.4 Use case description by role........................................................................................26
3.6 Non – functional requirements..........................................................................................112
3.6.1 Security......................................................................................................................112
3.6.2 Performance..............................................................................................................112
3.6.3 Usability.....................................................................................................................112
3.6.4 Scalability...................................................................................................................113
3.7 Entity relationship diagram................................................................................................114
Chapter 4 - Software Architecture Design......................................................................................115
4.1 Purpose..............................................................................................................................115
4.2 High level system architecture overview...........................................................................116
4.2.1 Context diagram.........................................................................................................116
4.2.2 Layer architecture diagram........................................................................................118
4.2.3 Component diagram..................................................................................................119
4.3 Detail design......................................................................................................................120
4.3.1 Package diagram........................................................................................................120
4.3.2 Class diagram.............................................................................................................121
4.3.3 User interface design.................................................................................................180
4.3.4 Sequence diagram for each function.........................................................................193
4.3.5 Database design.........................................................................................................205
Chapter 5 - Software Testing Document.........................................................................................214
5.1 Purpose..............................................................................................................................214
5.2 Test strategy......................................................................................................................214
5.2.1 Objective and scope...................................................................................................214
5.2.2 Testing tools and environment..................................................................................214
5.2.3 Human resources and responsibilities.......................................................................215
3
5.2.4 Acceptance criteria....................................................................................................215
5.2.5 Risk list.......................................................................................................................215
5.2.6 Test process...............................................................................................................215
5.3 Test plan............................................................................................................................216
5.3.1 Test model.................................................................................................................216
5.3.2 Stage of testing..........................................................................................................217
5.3.3 Functions to be tested...............................................................................................218
5.3.4 Functions not to be tested.........................................................................................218
5.3.5 Type of testing...........................................................................................................219
5.3.6 Test milestone............................................................................................................219
5.3.7 Deliverables...............................................................................................................219
5.4 Test approach....................................................................................................................220
5.4.1 Unit test.....................................................................................................................220
5.4.2 Integration and system test.......................................................................................221
5.4.3 Check list....................................................................................................................222
5.5 Defect log...........................................................................................................................223
5.5.1 Defect life cycle..........................................................................................................223
5.5.2 Defect example..........................................................................................................223
5.6 Test report.........................................................................................................................224
5.6.1 Integration test report...............................................................................................224
5.6.2 System test report.....................................................................................................224
Chapter 6 - SOFTWARE USER GUIDE..............................................................................................225
6.1 Deployment guidelines......................................................................................................225
6.1.1 Environment for user.................................................................................................225
6.1.2 Deploy CI web application for system admin.............................................................225
6.1.3 Deploy CI web services for system admin..................................................................227
6.2 User guide..........................................................................................................................229
6.2.1 Guest..........................................................................................................................229
6.2.2 User............................................................................................................................230
6.2.3 Designer.....................................................................................................................236
6.2.4 House owner..............................................................................................................263
References.........................................................................................................................................284

< This page is intentionally blank >


4
5
Acknowledgements

First and foremost, we would love to express our deep gratitude to our supervisor, Mr. Phan Truong
Lam. Without his assistance and dedicated involvement in every step throughout the process, this
paper would have never been accomplished. We also sincerely thank to all of our teachers who had
taught us in four years in FPT University.

We also grateful to our friends whom we have had the pleasure to know and work with during this
semester. We could say that the capstone project could not have been fully accomplished without
their support.

Nobody has been more important to us in the pursuit of this project than our family. We would love
to thank our parents, our sisters and brothers who offered unlimited encouragement and support.

6
Definitions and Acronyms
No Definition Explanation
& Acronym
1 CI Creative Inside.
2 Guest People who visit the CI website and have’n had the account yet.
3 House owner People who are in need of designing a house.
4 Designer/Professional The designer who are an expert in design.
5 Customer The term includes both house owner and designer.
6 User The term includes guest, house owner and designer.
7 Showroom/Gallery Designer’s works, it shows their capability of designing,
experiences, and achievements.
8 SRS Software requirement specification.
9 PM Project manager.
10 Dev Developer.
11 BA Business analyst.
12 EVBN EU – Vietnam business network
13 CI-project A unit of work between designer and customer. A project of a
customer.
14 FB facebook

7
8
Chapter 1 - Introduction
1.1 Purpose
This chapter provides an overview of the capstone project. It includes the project information,
the background of the capstone project, the problem and our proposal to solve the problem.

1.2 Project information


Project information
Project name Creative inside
Project code ATTM
Group name JGeek
Product type Website application
Timeline 14th May 2018 - 31st August 2018
1.3 The people
Full name Phone number Email Title

Phan Trường Lâm 0913 507 828 lampt2@fe.edu.vn Supervisor

Supervisor:

Members:

No Full name Student ID Phone number Email Role in group

1 Vũ Việt Anh SE04447 0917 755 313 anhvvse04447@fpt.edu.vn Team leader

2 Đỗ Duy Tân SE04433 0963 544 592 tanddse04433@fpt.edu.vn Team member

3 Nguyễn Văn Tú SE04009 0917 432 386 tunvse04009@fpt.edu.vn Team member

4 Phạm Đình Mai SE04409 0168 8661 450 maidpse04409@fpt.edu.vn Team member

1.4 Background
The need for design and re-design the house is becoming more popular nowadays, according
to the forecast of demand building house in the final research report “Vietnam’s furniture & home
decor” [1] of EVNB (EU - Vietnam business network) :

9
Figure 1-1 Forecast of house building

Design and décor services are the most in a traditional way! The house owner and the services
providers are face-to-face discussions. Recently, email is used to exchange information; however, it
causes some troubles to both sides.

1.5 The problem


After finding a designer by a talking with friends or searching on the internet, the house owner
has to go to meet and discuss face-to-face with them. It limits the chances to choose designers who
are not in the same city as the house, and it costs a lot of time and money to travel. There are no
online services to solve this problem at the moment in Vietnam up to May 2018.

1.6 Literature review


Almost designing and décor companies maintain a website to provide corporate news and introduce
their products. No company provides online services to get the requirements, contract discussion,
manage contract and deliverables with customer.

Thietkenoithat.com

Figure 1-2. Thietkenoithat website

10
noithatahome.vn

Figure 1-3. Noithatahome.vn website

Thietkenoithat.com and noithatahome.vn are websites of consulting, designing and building’s


companies. These functions of this website are:
 Listing showroom design and company’s introduction.
 Live chat for customer’s consulting.

1.7 The Proposal system


1.7.1 Our Ideas
The idea of our team is to create a website to connect designers and customers who need to
decorate their home.
 The designers are able to:
 Reaching more potential customers.
 Easy to deal with customers from the first requirement to the final designing document.
 The house owners are able to:
 Searching for the suitable designers.
 Saving time while all the document and information can be exchanged on the website.
 Easy to choose designers, no limitation to the location where the house is.

11
1.7.2 The proposal

Figure 1-4. Roles in CI system

The Creative Inside system desires to provide better communication between the house
owners and designers by internet technology through following services:
 Full text search for designer, gallery.
 Reliable payment transactions when CI is a third party in a transaction between the house
owner and the designer. It helps to remove the doubt between two sides on the internet.

1.7.3 System group functions


The CI has the following roles and main functions:
 Guest:
 Search and view galery.
 Search and view designers.
 House Owner:
 CI-project management.
 Payment history.
 Designer:
 CI-project management.
 Galery management.
 Admin:
 House owner and designer management.
 Payment management.

12
Chapter 2 : Project Management Plan
2.1 Purpose
This section describes the software process model, team organization and management plan of the
project. Team members must follow this section to complete assigned tasks and deadline.

2.2 Software process model

Figure 2- 2 Iterative process model development

2.2.1 About the iterative model


The iterative model is a particular implementation of a software development life cycle (SDLC)
that focuses on an initial, simplified implementation, which then progressively gains more
complexity and a broader feature set until the final system is complete. Each cycle (iteration) ends
with a usable system.
 Planning & Requirements: the first step is go through an initial planning stage to map out
the specification documents.
 Analysis & Design: the second step is performed to nail down the appropriate business logic,
database models. The design stage also occurs here, establishing any technical requirements
to meet the needs of the analysis and design stage.
 Implementation: the actual implementation and coding process can now begin. All planning,
specification, and design docs up to this point are coded and implemented into this initial
iteration of the project.
 Verification and testing: the next step is to go through a series of testing procedures to
identify and locate any potential bugs or issues that have cropped up.
 Evaluation: the last step is evaluating the development up to this stage. This allows the
entire team to examine where the project is at, where it needs to be, what should change.

13
2.2.2 Advantages and disadvantages considering
Advantages Disadvantages
Innovative technology is involved – developer Heavily document changes when there are
team can learn as they work on the project. more and more iteration.
The major requirements are defined, while Issues about system architecture may turn out
some functionalities enhancements evolve with to be a big problem when lacking of a full
the process of the development process. requirements specification.
Functional prototypes are developed early and Highly skilled resources are required for
delivery for each iteration. analysis skill.
2.3 Organization structure

Figure 2- 3 Organization structure

2.4 Roles and responsibilities


Role Responsibilities Full name
Project  Guide team toward the goal of successfully passing the final Vũ Việt Anh
manager capstone project.
 Develope schedule and assigning task with responsibilities for
each member.
 Review and make sure the capstone project succeed.
Business analyst team
BA leader  Elicitate and analyze requirement. Vũ Việt Anh
14
 Define scope and create SRS template.
 Design entity relationship diagram.
BA #1  Define business process flow and object state. Nguyễn Văn Tú
BA #2  Capture and specific describle use case. Phạm Đình Mai
Developer
Architecture  Define high level architecture base on SRS. Đỗ Duy Tân
leader  Implement configuration and web server
 Coding for controller, services and server API
Developer  Research and implement UX design for frontend. Nguyễn Văn Tú
 Design and coding frontend objects.
Tester
Test leader  Create template testing document. Vũ Việt Anh
 Define test strategy, create test plan and defect log template.
Tester #1  Implement test case and log defect Phạm Đình Mai
Tester #2  Implement test case and log defect Đỗ Duy Tân
Tester #3  Implement test case and log defect Nguyễn Văn Tú
2.5 Tools and techniques
Software tools Description
Management tools Microsoft project 2016, Trello.
Git version control Gitlab 11.1.
Documentation tools Microsoft suit, One note.
IDE Visual studio code, IntelliJ IDE.
UML tools Visio , lucid chart, visual paradigm, Balsamiq.
Communication tools Facebook, skype , Onenote.

2.6 Project management plan


2.6.1 Project schedule
The task lists detail is describle in: CreativeInside.mpp

Figure 2- 4 Task lists

2.6.2 Meeting minutes


Meeting minutes are written for any meeting. The following template is used:

15
Figure 2- 5 Meeting minutes example

16
2.6.3 Risk Management Plan
After using brainstorming, we categorized risk list in the following table:

Risk Risk description Knowledge Root cause Potential respond


number area
(R#)
1 Poor planning work task Integration Lacking experience of Discuss with team
for each member, project manager member for each
impropriate resource task planning.
allocation
2 Poor defining scope, Scope Weak elicitation Meeting with BA
ambiguous definition requirement of BA expert.
3 Change objective during Scope Different opinion Redefine objective
the project between team member with each team
member.
4 Fail for estimating Time Developer team is lack Doing overnight
iteration time, of predict work work to keep
inadequate change process. process
continuing
5 Weak of workmanship of Quality Architecture leader is Meeting with
structure design lack of experience. expert for help
6 Poor solving conflict Human Team member is not Working in group,
management. resource satisfy for work teambuilding.
resources.
7 Document for meeting Document Document is not Using notes,
minute is not change captured. images, video.
documented or not clear.
8 Unclear analysis of risk Risk Analysis risk is not clear Discussion with
between testers. team member.
9 Poor assurance Risk Testing leader is lack of Meeting with
management experience expert.
10 Meeting time conflict Stakeholders Team members don’t Change the time
with domain expert. have appropriate time meeting.
for meeting

17
The following table depicts the severity and probability for each risk above:

LOW MEDIUM HIGH EXTREME

RISK
GENERALLY
RATING ACCEPTABLE ALARP UNACCEPTABLE
INTOLERABLE

KEY (as low as


reasonably
practicable)

SEVERITY

ACCEPTABLE TOLERABLE UNDESIRABLE INTOLERABLE


 
Little to no effect effects are felt but serious impact on Could result in
not critical to action and outcome disaster
outcome

IMPROBABLE LOW MEDIUM MEDIUM HIGH

Unlikely to occur R9 R4 R5
PROBABILITY

POSSIBLE LOW MEDIUM HIGH EXTREME

Likely occur R10 R1 R8

PROBABLE MEDIUM HIGH HIGH EXTREME

Will occur R7 R2 R6

2.6.4 Communication Plan


Member information
No Name Position Contact information
1 Vũ Việt Anh Project manager Email: anhvvse04447@fpt.edu.vn
Phone number: 0917 755 313
2 Đỗ Duy Tân Developer Email: tanddse04433@fpt.edu.vn
Phone number: 0963 544 592
3 Nguyễn Văn Tú Developer Email: tunvse04009@fpt.edu.vn
Phone number: 0917 432 386
4 Phạm Đình Mai Tester Email: maipdse04409@fpt.edu.vn
Phone number: 01688 661 450

18
Project report and meeting
# Activity Stakeholder Time Description

1 Weekly report  Team member Tuesday  Report in meeting minutes.


 Supervisor  Review status based on weekly report.
 Plan for next weekly report.
2 Daily report Project manager Daily  Report issue and planning
 Support to solve issues.
3 Ad-hoc report Team members Event-based  Report and talking face to face.

Project communication
# Communication type Description
1 Weekly meeting schedule Spend one day in a week for meeting to review and update
solution for problems.
2 Unscheduled meeting If any team member have problems that he wants to solved
immediately, we will have a chat box and skype call.
3 Communication channel Our main communication are physical meeting, chat box, facebook
messenger and skype call.
2.6.5 Coding convention
The following coding conventions are used to code the project to help improve readabilities,
maintenance abilities, and code more easily.

# Style Implementation component


1 Java coding convention [2] Web service API
2 Angular [3] Web application (presentation layer)

19
Chapter 3 - Software Requirements Specification
3.1 Purpose
The purpose of this chapter is to elicitation use cases to clarify how user interact with system,
what are the functions and how the functions will perform. It includes the business process flow
diagram, state transition, and use case detailed description of the CI system.

3.2 Definitions, acronyms, and abbreviations


# Term Definition
1 Guest Person who visit the website without registration.
2 Designer Person who is expertize in designing house decorator or blueprint.
3 House owner Person who is in need of house design.
4 Customer The term for both these role:
 Designer
 House owner
5 User The term for all these role:
 Guest
 Designer
 House owner
6 CI Creative Inside.
7 CI-Project A unit of work between designer and customer. A project of a
customer.
8 Payment A milestone of money transferation in CI-project.
9 Request A request is sent by house owner to a designer for asking consulting.

20
3.3 User requirement specification
3.3.1 Business process diagram of creating a CI-Project

Figure 3-6 CI-Project process flow diagram

21
Description:

When an appropriate designer is found, house owner sends a request for consulting to a
designer. Designer receives the request and create a CI-project. The CI-project include both party
information and payment milestone. House owner will view and decide to accept or refuse the CI-
project.
After the project is accepted, house owner will deposit money to CI system to receive the
design document. Once the document is verified by house owner, the designer will receive money
for their work. The process is repeatedly until the last milestone payment. The house owner verified
last step and rate the designer before closing CI-project.

3.3.2 CI-project state diagram

Figure 3- 7 CI-project state diagram

Description:

No State Description
1 New State of CI-project after the designer creates the CI-project and send to
house owner.
2 Refused The house owner refuses the CI-project after viewing it. A comment can be
added to notify designer to change the information of CI-project.
3 Pending When the CI-project is accepted by house owner, it will stay at this state
until the customer deposit money for the CI-system following the first
payment milestone.
4 Running After house owner deposit money for the CI-project in the system, house
owner and designer can exchange documents inside CI-project.
5 Suspending When a running CI-project is not deposited money, designer is unable to
upload working documents.
6 Locked Whenever house owner or designer reports dispute of a CI-project, the
system admin can check the report and lock the project for further actions.
Both sides can not proceed inside CI-project.
7 Closed When the last document of CI-project is approved by house owner, the
project is closed.

22
3.3.3 Rating designer
House owner can rate from 1 to 5 stars for a CI-project when they are closing CI-project,
therefore each designer will have a calculated rate base on their successful project. Creative Inside
uses weighted rating algorithm [4] to calculate the rate of each designer.
The rate is calculated in the following formula:
−N
Q
x́ 5∗1−e
S= +
2 2

Where:

 S: Rate score, will be rounded up to first decimal number [5].


 x́ : Mean of rating, given that
N

∑ ri
1
x́=
N

 r i : [1,5]: rating number i.


 N: Total number of rate.
 e ❑: Euler's number.
 Q : Realiable number of project rate, given that Q = 3 in CI system.

3.4 System requirement specification


User Interface: The text is written in Vietnamese.
Hardware Interface: The web application is purely designated for software and does not require any
hardware interface.
Software interface: The CI system uses Google Oauth2[6] for login with google account.
Communication: The website is communicated with CI web service by HTTPS request, send
notification email (SMTP).
3.5 Functional specification
3.5.1 Business rule repository
Domain business rule:

No Description
BR-1 One project has only one house owner and one designer.
BR-2 One project must have at least one payment created.
BR-3 A CI-project will be closed automatically if there is no upload documentation after it
started.
BR-4 Projects can be closed anytime by house owner.
BR-5 Designers can not view any documents when it is a locked project or a closed project.
BR-6 Bank account’s number from 8 to 14 characters.
BR-7 One image showroom can be liked only once by each customer.
Specific business rule:

No Description
BI-1 The field must be filled by characters consist of alphabet, numbers and space.
23
BI-2 The field must be filled by characters consist of alphabet and numbers.
BI-3 The field must be filled, follow by format “X@X.Y”, where X is characters and Y is
alphabets. X and Y are at least 1 character.
BI-4 Start-date of a payment is after End-date.
BI-5 Must enter from 6 to 50 characters.
BI-6 Date follow format dd-mm-YYY.

3.5.2 Use case diagram

Figure 3-8 UC diagram of all actors

24
3.5.3 Use case list
Actors Use case ID Use case name
Guest, designer, house owner UC-GU-01 Register account
UC-CM-01 Search
UC-CM-02 View a showroom
UC-CM-03 View a designer profile
UC-CM-04 Login
Designer UC-DN-01 Logout
UC-DN-02 Edit profile
UC-DN-03 Send messages
UC-DN-04 Create a CI-project
UC-DN-05 View a CI-project
UC-DN-06 Edit a CI-project
UC-DN-07 Create a showroom
UC-DN-08 Edit a showroom
UC-DN-09 Delete a showroom
UC-DN-10 Report a designer
UC-DN-11 Report a house owner
UC-DN-12 Like showroom images
House owner UC-HO-01 Logout
UC-HO-02 Edit profile
UC-HO-03 Create a request
UC-HO-04 Send messages
UC-HO-05 Accept a CI-project
UC-HO-06 View a CI-project
UC-HO-07 Reject a CI-project
UC-HO-08 Accept a payment
UC-HO-09 Close a CI-project
UC-HO-10 Like images
UC-HO-11 Report a designer
Admin UC-AD-01 View user profile
UC-AD-02 Ban a user
UC-AD-03 View a report
UC-AD-04 Lock a CI-project
UC-AD-05 Active a CI-project
UC-AD-06 Active a payment
UC-AD-07 Close a CI-project

25
3.5.4 Use case description by role
Use case diagram of user

Figure 3-9 Use case diagram of user

26
Register account

Figure 3- 10 Guest register a new account

USECASE – UC-GU-01 – SPECIFICATION


Use case No. UC-GU-01 Use case version v1.0
Use case name Register account
Author Pham Dinh Mai
Date 22/05/2018 Priority Medium
Primary actor Guest Secondary actor N/A
Description Allows the actor to register new account by gmail or by CI account
Pre-condition Guest visit the website.
Post-condition Regist account successfully.
Trigger Click on button “Đăng ký”.

Main flow:
No Actor events System respond
1 Click on button “Đăng ký” at the top-right
of website.
2 Show “Đăng ký” pop-up.
27
3 Actor fills information and then click on
button “Đăng ký”.
4 Show successful message.
Show pop-up “Vui lòng kiểm tra email
để kích hoạt tài khoản”

Alternative Flows: N/A

Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Click on button close at the top-right of
pop-up.
4.1 Navigate to the previous page.

ET2 At step 3
No Actor events System respond
3.2 Click on button “Facebook”.
4.2 Show Facebook login privilege pop-up.
5.2 Click on button “Continue” if you are signed
in to Facebook or sign up with your
Facebook account.
6.2 Show role selection.
7.2 Select your role and click on button “Xác
nhận”
8.1 System redirect to home page.

ET3 At step 3
No Actor events System respond
3.3 Click on button “Google”.
4.3 Show Google login privilege popup.
5.3 Select your account if you are signed in to
Google or sign up with your Google
account.
6.3 Show role selection.
7.3 Select your role and click on button “Xác
nhận”
8.3 System redirect to home page.

Exception: N/A

Business Rules: BI-1, BI-2, BI-3, BI-5

28
Search

Figure 3- 11 User search designer and showroom information

USECASE – UC-CM-01 – SPECIFICATION


Use case No. UC-CM-01 Use case version v2.0
Use case name Search
Author Pham Dinh Mai
Date 02/07/2018 Priority Medium
Primary actor User (designer, house Secondary actor N/A
owner, guest)
Description This function allows actor to search designer and showroom
information.
Pre-condition User visited the website.
Post-condition Show results that match the search request.
Trigger Click on button “Tìm kiếm”.

Main flow:
No Actor events System respond

29
1 Enter the keyword in the search field then
click on “Tìm kiếm” button.
2 Show search results and number of
results found.

Alternative Flows: N/A

Extension Flows:
ET1 At step 1
No Actor events System respond
1.1 Enter the keyword in the search field.
Press enter button on the keyboard.

Exception: N/A

Business Rules: BI-1, BI-5

View a showroom

Figure 3- 12 user view a showroom

USECASE – UC-CM-02 – SPECIFICATION

30
Use case No. UC-CM-02 Use case version v2.0
Use case name View a showroom
Author Pham Dinh Mai
Date 02/7/2018 Priority Medium
Primary actor User (designer, house Secondary actor N/A
owner, guest)
Description This function allows the actor to view showroom.
Pre-condition - Users visit the website.
Post-condition - Success:
+ Users can view the show room detail.
Trigger  Click on the showroom.

Main flow:
No Actor events System respond
1 Click the category name in the homepage.

2 Show all showrooms.


3 Click on the showroom.
4 Show showroom detail.

Alternative Flows:
Alt1 At step 1
No Actor events System respond
1.1 Enter the keyword in the search field and
click on “Tìm kiếm” button.
2.1 Show search results and number of
results found.
3.1 Click on a showroom in the results list.

Extension Flows: N/A

Exception: N/A

Business Rules: BI-1, BI-5

31
View designer profile

Figure 3-13 User view designer profile

USECASE – UC-CM-03 – SPECIFICATION


Use case No. UC-CM-03 Use case version v2.0
Use case name View designer profile
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor User (designer, house Secondary actor N/A
owner, guest)
Description This function allows the actor to view designer profile.
Pre-condition Users access to the system.
Post-condition Users can view designer profile.
Trigger N/A

Main flow:
No Actor events System respond
1 Click the category name in the homepage.

2 Show all showrooms.


3 Click on the name of designer in the
“category” page.

32
4 Show showroom detail.

Alternative Flows:
Alt1 At step 1
No Actor events System respond
1.1 Enter the keyword in the search field and
click on “Tìm kiếm” button.
2.1 Show search results and number of
results found.
3.1 Click on a designer in the results list.

Extension Flows: N/A

Exception: N/A

Business Rules: BI-1, BI-5

Login

Figure 3- 14 User log in to CI system

33
USECASE – UC-CM-04 – SPECIFICATION
Use case No. UC-CM-04 Use case version v1.0
Use case name Login
Author Pham Dinh Mai
Date 22/05/2018 Priority Medium
Primary actor Customer (house owner, Secondary actor N/A
designer)
Description This function allows the actor to login into the system.
Pre-condition - Customers visit the website.
- The customer has activated account.
Post-condition - Success:
+ Login successfully to the system.
Trigger  Click on button “Đăng nhập”.

Main flow:
No Actor events System respond
1 Click on button “Đăng nhập” at the top-
right of website.
2 Show “Đăng nhập” pop-up.
3 User fills username, password to text field
then click on button “Đăng nhập”.
4 System redirect to web page which
user is accessing.

Alternative Flows:
Alt1 At step 3
No Actor events System respond
3.1 Click on button “Đăng nhập bằng Google”.
4.1 Show Google login privilege popup.
5.1 Select your account if you are signed in to
Google or sign up with your Google
account.
6.1 Show role selection.
7.1 Select your role and click on button “Xác
nhận”
8.1 System redirect to home page.

Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Click on button close at the top-right of
pop-up.
4.1 Navigate to the previous page.

Exception: N/A

Business Rules: BI-2, BI-5

34
Use case diagram of designer

Figure 3-15 Use case diagram of designer

35
Logout

Figure 3-16 Designer logout from CI system

USECASE – UC-DN-01– SPECIFICATION


Use case No. UC-DN-01 Use case version v2.0
Use case name Logout
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor Designer Secondary actor N/A
Description This function allows the actor to exit the system.
Pre-condition Designer has logged into the system.
Post-condition Logout successfully.
Trigger Click on button “Đăng xuất”.

Main flow:
No Actor events System respond
1 Click on avatar at the top-right of the
website.
2 Show a drop-down menu.
3 Click on button “Đăng xuất”.
4 The system redirects to the home page.

Alternative Flows: N/A

36
Extension Flows: N/A

Exception: N/A

Business Rules: N/A

Edit profile

Figure 3-17 Designer edit profile

USECASE – UC-DN-02– SPECIFICATION


Use case No. UC-DN-02 Use case version v2.0
Use case name Edit profile
Author Pham Dinh Mai
Date 10/08/2018 Priority Low
Primary actor Designer Secondary actor N/A
Description This function allows the actor to edit personal profile.
Pre-condition Designer has logged into the system.
37
Post-condition Personal profiles are edited by designer.
Trigger Click the designer's name after clicking on the designer's avatar at the
top right of the page.

Main flow:
No Actor events System respond
1 Click on avatar at the top-right of the
website.
2 Show a drop-down menu.
3 Click on designer’s name.
4 Show edit designer profile form.
5 Click on button “Chọn ảnh”.
6 Show image selection window.
7 Click on button “Lưu”.
8 Upload progress bar to 100%.
9 Enter information then click on button
“Lưu”.
10 Show successful message.
11 Click on button “OK”.
12 Close successful message and navigate
to home page.

Alternative Flows: N/A

Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Click on “Bộ sưu tập”.
4.1 Show “Bộ sưu tập” tab with all
showrooms.

ET2 At step 3
No Actor events System respond
3.2 Click on “Thanh toán”.
4.2 Show “Thanh toán” tab with all
payments.

ET3 At step 3
No Actor events System respond
3.3 Click on “Đánh giá”.
4.3 Show “Đánh giá” tab with all reviews.

ET4 At step 3
No Actor events System respond
3.4 Click on “Đăng xuất”.
4.4 Go to UC-DN-01.

ET5 At step 3
No Actor events System respond
3.5 Click on “Đổi mật khẩu”.
38
4.5 Go to UC-DN-14.

Exception: N/A

Business Rules: BI-1, BI-2, BI-3, BI-5, BI-6

Send messages

Figure 3-18 Designer send message to house owner

USECASE – UC-DN-03 – SPECIFICATION


Use case No. UC-DN-03 Use case version v1.0
Use case name Send messages
Author Pham Dinh Mai
Date 22/05/2018 Priority Low
Primary actor Designer Secondary actor N/A
Description This function allows the actor to send message to house owner.
Pre-condition Designer is:
- logged into the system.
- accepted request of the house owner.
39
Post-condition The message has been accepted by the system and sent to the house
owner.
Trigger Click on icon “Yêu cầu”.

Main flow:
No Actor events System respond
1 Click on icon “Yêu cầu”.

2 Show “Yêu cầu” tab with all requests.


3 Click on a request.
4 Show message box.
5 Click the text box and enter the message
then click the submit button.
6 Send this message to the house owner.

Alternative Flows:
Alt1 At step 5
No Actor events System respond
5.1 Click the text box and enter the message
then press the “Enter” key from keyboard.

Alt2 At step 1
No Actor events System respond
1.2 Click on icon “Dự án”.
2.2 Show “Dự án” tab with all projects.
3.2 Click on “Yêu cầu” tab.
4.2 Show “Yêu cầu” tab with all requests.
5.2 Click on a request.
6.2 Show message box.
7.2 Click the text box and enter the message
then click the submit button.
8.2 Send this message to the house owner.

Alt3 At step 1
No Actor events System respond
1.3 Click on avatar at the top-right of the page.
2.3 Show drop-down menu.
3.3 Click on “Bộ sưu tập”.
4.3 Show “Bộ sưu tập” tab with all
showrooms.
5.3 Click on “Yêu cầu” tab.
6.3 Show “Yêu cầu” tab with all requests.
7.3 Click on a request.
8.3 Show message box.
9.3 Click the text box and enter the message
then click the submit button.
10.3 Send this message to the house owner.

Alt4 At step 1
No Actor events System respond
40
1.4 Click on avatar at the top-right of the page.
2.4 Show drop-down menu.
3.4 Click on “Thanh toán”.
4.4 Show “Thanh toán” tab with all
payments.
5.4 Click on “Yêu cầu” tab.
6.4 Show “Yêu cầu” tab with all requests.
7.4 Click on a request.
8.4 Show message box.
9.4 Click the text box and enter the message
then click the submit button.
10.4 Send this message to the house owner.

Alt5 At step 1
No Actor events System respond
1.5 Click on avatar at the top-right of the page.
2.5 Show drop-down menu.
3.5 Click on “Đánh giá”.
4.5 Show “Đánh giá” tab with all reviews.
5.5 Click on “Yêu cầu” tab.
6.5 Show “Yêu cầu” tab with all requests.
7.5 Click on a request.
8.5 Show message box.
9.5 Click the text box and enter the message
then click the submit button.
10.5 Send this message to the house owner.

Extension Flows: N/A

Exception: N/A

Business Rules: BI-1, BI-2, BI-5, BR-1

41
Create a CI-project

Figure 3- 19 Designer create a CI-project

USECASE – UC-DN-04 – SPECIFICATION


Use case No. UC-DN-04 Use case version v1.0
Use case name Create a project
Author Pham Dinh Mai
Date 22/05/2018 Priority High
Primary actor Designer Secondary actor N/A
Description This function allows the actor to create project.
Pre-condition Designer has logged into the system and the request is sent of the
house owner.
Post-condition New project has been created.
Trigger Click on button “Tạo dự án”.

Main flow:
No Actor events System respond
1 Click on icon “Yêu cầu”.
2 Show “Yêu cầu” tab with all requests.
3 Click on the request then click on button

42
“Tạo dự án”.
4 Show create project form.
5 Enter information and click on button
"Thêm công việc".
6 Show “Tạo công việc” pop-up.
7 Enter information and click on button “Xác
nhận”.
8 Close “Tạo công việc” pop-up.
9 Click on button “Tạo dự án”.
10 Show successful messeage.
11 Click on button “OK”.
12 Close successful message and navigate
to project page.

Alternative Flows:
Alt1 At step 1
No Actor events System respond
1.1 Click on icon “Dự án”.
2.1 Show “Dự án” tab with all projects.
3.1 Click on “Yêu cầu” tab.
4.1 Show “Yêu cầu” tab with all requests.
5.1 Click on the request then click on button
“Tạo dự án”.
6.1 Show create project form.
7.1 Enter information and click on button
"Thêm công việc".
8.1 Show “Tạo công việc” pop-up.
9.1 Enter information and click on button “Xác
nhận”.
10.1 Close “Tạo công việc” pop-up.
11.1 Click on button “Tạo dự án”.
12.1 Show successful messeage.
13.1 Click on button “OK”.
14.1 Close successful message and navigate
to project page.

Alt2 At step 1
No Actor events System respond
1.2 Click on avatar at the top-right of website.
2.2 Show drop-down menu.
3.2 Click on “Bộ sưu tập”.
4.2 Show “Bộ sưu tập” tab with all
showroom.
5.2 Click on “Yêu cầu” tab.
6.2 Show “Yêu cầu” tab with all requests.
7.2 Enter information and click on button
"Thêm công việc".
8.2 Show “Tạo công việc” pop-up.
9.2 Enter information and click on button “Xác
nhận”.
43
10.2 Close “Tạo công việc” pop-up.
11.2 Click on button “Tạo dự án”.
12.2 Show successful messeage.
13.2 Click on button “OK”.
14.2 Close successful message and navigate
to project page.

Alt3 At step 1
No Actor events System respond
1.3 Click on avatar at the top-right of website.
2.3 Show drop-down menu.
3.3 Click on “Thanh toán”.
4.3 Show “Thanh toán” tab with all
payments.
5.3 Click on “Yêu cầu” tab.
6.3 Show “Yêu cầu” tab with all request.
7.3 Enter information and click on button
"Thêm công việc".
8.3 Show “Tạo công việc” pop-up.
9.3 Enter information and click on button “Xác
nhận”.
10.3 Close “Tạo công việc” pop-up.
11.3 Click on button “Tạo dự án”.
12.3 Show successful messeage.
13.3 Click on button “OK”.
14.3 Close successful message and navigate
to project page.

Alt4 At step 2
No Actor events System respond
1.4 Click on avatar at the top-right of website.
2.4 Show drop-down menu.
3.4 Click on “Đánh giá”.
4.4 Show “Đánh giá” tab with all reviews.
5.4 Click on “Yêu cầu” tab.
6.4 Show “Yêu cầu” tab with all requests.
7.4 Enter information and click on button
"Thêm công việc".
8.4 Show “Tạo công việc” pop-up.
9.4 Enter information and click on button “Xác
nhận”.
10.4 Close “Tạo công việc” pop-up.
11.4 Click on button “Tạo dự án”.
12.4 Show successful messeage.
13.4 Click on button “OK”.
14.4 Close successful message and navigate
to project page.

Extension Flows:
ET1 At step 9
44
No Actor events System respond
9.1 Click on button “Bổ sung điều khoản”.
10.1 Show “Thêm điều khoản” pop-up.
11.1 Enter information and click on button “Xác
nhận”.
12.1 Close “Thêm điều khoản” pop-up.

ET2 At step 5
No Actor events System respond
5.2 Click on button “Ẩn cuộc trò chuyện”.
6.2 Hide conversation.
7.2 Click on button “Hiện cuộc trò chuyện”.
8.2 Show conversation.

Exception: N/A

Business Rules: BR-1, BR-2, BR-3, BR-5, BI-1, BI-2, BI-3, BI-4, BI-5, BI-6, BI-7

45
View a CI-project

Figure 3- 20 Designer view a CI-project

USECASE – UC-DN-05 – SPECIFICATION


Use case No. UC-DN-05 Use case version v1.0
Use case name View a project
Author Pham Dinh Mai
Date 22/05/2018 Priority Medium
Primary actor Designer Secondary actor N/A
Description This function allows the designer to view projects.
Pre-condition Designer is logged in CI system and creates at least one CI-project.
Post-condition The project can view by house owner.
Trigger Click on icon “Dự án”.

Main flow:
No Actor events System respond
1 Click on icon “Dự án”.
2 Show “Dự án” tab with all projects.
3 Click on a project.
4 Show project detail.

46
Alternative Flows:
Alt1 At step 1
No Actor events System respond
1.1 Click on avatar at the top-right of website.
2.1 Show drop-down menu.
3.1 Click on “Bộ sưu tập”.
4.1 Show “Bộ sưu tập” tab with all
showrooms.
5.1 Click on “Dự án” tab.
6.1 Show “Dự án” tab with all requests.
7.1 Click on a project.
8.1 Show project detail.

Alt2 At step 1
No Actor events System respond
1.2 Click on avatar at the top-right of website.
2.2 Show drop-down menu.
3.2 Click on “Thanh toán”.
4.2 Show “Thanh toán” tab with all
payments.
5.2 Click on “Dự án” tab.
6.2 Show “Dự án” tab with all projects.
7.2 Click on a project.
8.2 Show project detail.

Alt3 At step 1
No Actor events System respond
1.3 Click on avatar at the top-right of website.
2.3 Show drop-down menu.
3.3 Click on “Đánh giá”.
4.3 Show “Đánh giá” tab with all reviews.
5.3 Click on “Dự án” tab.
6.3 Show “Dự án” tab with all projects.
7.3 Click on a project.
8.3 Show project detail.

Alt4 At step 1
No Actor events System respond
1.4 Click on icon “Yêu cầu”.
2.4 Show “Yêu cầu” tab with all requests.
3.4 Click on “Dự án” tab.
4.4 Show “Dự án” tab with all projects.
5.4 Click on a project.
6.4 Show project detail.

Extension Flows: N/A

Exception: N/A

47
Business Rules: BR-1, BR-2, BR-3, BR-5

Edit a CI-project

Figure 3- 21 Designer edit a CI-proect

USECASE – UC-DN-06 – SPECIFICATION


Use case No. UC-DN-06 Use case version v1.0
Use case name Edit a CI-project
Author Pham Dinh Mai
Date 22/05/2018 Priority Medium
Primary actor Designer Secondary actor N/A
Description This function allows the actor to edit CI-project.
Pre-condition - Designer has logged into the system.
The CI-project is created or is rejected by house owner.
Post-condition The CI-project has been edited by designer.
Trigger Click on button “Chỉnh sửa thông tin”.

Main flow:
No Actor events System respond
48
1 Click on icon “Dự án”.
2 Show “Dự án” tab with all projects.
3 Click on project have “Đã từ chối” or “Mới”
status.
4 Show project details.
5 Click on button “Chỉnh sửa thông tin”.
6 Show edit project form.
7 Enter the information and click on button
“Thêm công việc”.
8 Show “Tạo công việc” pop-up.
9 Enter information and click on button “Xác
nhận”.
10 Close “Tạo công việc” pop-up.
11 Click on button “Lưu thay đổi”.
12 Show successful message.
13 Click on button “OK”.
14 Close successful message.

Alternative Flows:
Alt1 At step 1
No Actor events System respond
1.1 Click on icon “Yêu cầu”.
2.1 Show “Yêu cầu” tab with all requests.
3.1 Click on “Dự án” tab.
4.1 Show “Dự án” tab with all project
5.1 Click on project have “Đã từ chối” or “Mới”
status.
6.1 Show project detail.
7.1 Click on button “Chỉnh sửa thông tin”.
8.1 Show edit project form.
9.1 Enter the information and click on button
“Thêm công việc”.
10.1 Show “Tạo công việc” pop-up.
11.1 Enter information and click on button “Xác
nhận”.
12.1 Close “Tạo công việc” pop-up.
13.1 Click on button “Lưu thay đổi”.
14.1 Show successful message.
15.1 Click on button “OK”.
16.1 Close successful message.

Alt2 At step 1
No Actor events System respond
1.2 Click on avatar at the top-right of website.
2.2 Show drop-down menu.
3.2 Click on “Bộ sưu tập”.
4.2 Show “Bộ sưu tập” tab with all
showrooms.
5.2 Click on “Dự án” tab.
6.2 Show “Dự án” tab with all project
49
7.2 Click on project have “Đã từ chối” or “Mới”
status.
8.2 Show project detail.
9.2 Click on button “Chỉnh sửa thông tin”.
10.2 Show edit project form.
11.2 Enter the information and click on button
“Thêm công việc”.
12.2 Show “Tạo công việc” pop-up.
13.2 Enter information and click on button “Xác
nhận”.
14.2 Close “Tạo công việc” pop-up.
15.2 Click on button “Lưu thay đổi”.
16.2 Show successful message.
17.2 Click on button “OK”.
18.2 Close successful message.

Alt3 At step 1
No Actor events System respond
1.3 Click on avatar at the top-right of website.
2.3 Show drop-down menu.
3.3 Click on “Thanh toán”.
4.3 Show “Thanh toán” tab with all
payments.
5.3 Click on “Dự án” tab.
6.3 Show “Dự án” tab with all project
7.3 Click on project have “Đã từ chối” or “Mới”
status.
8.3 Show project detail.
9.3 Click on button “Chỉnh sửa thông tin”.
10.3 Show edit project form.
11.3 Enter the information and click on button
“Thêm công việc”.
12.3 Show “Tạo công việc” pop-up.
13.3 Enter information and click on button “Xác
nhận”.
14.3 Close “Tạo công việc” pop-up.
15.3 Click on button “Lưu thay đổi”.
16.3 Show successful message.
17.3 Click on button “OK”.
18.3 Close successful message.

Alt4 At step 1
No Actor events System respond
1.4 Click on avatar at the top-right of website.
2.4 Show drop-down menu.
3.4 Click on “Đánh giá”.
4.4 Show “Đánh giá” tab with all reviews.
5.4 Click on “Dự án” tab.
6.4 Show “Dự án” tab with all project

50
7.4 Click on project have “Đã từ chối” or “Mới”
status.
8.4 Show project detail.
9.4 Click on button “Chỉnh sửa thông tin”.
10.4 Show edit project form.
11.4 Enter the information and click on button
“Thêm công việc”.
12.4 Show “Tạo công việc” pop-up.
13.4 Enter information and click on button “Xác
nhận”.
14.4 Close “Tạo công việc” pop-up.
15.4 Click on button “Lưu thay đổi”.
16.4 Show successful message.
17.4 Click on button “OK”.
18.4 Close successful message.

Extension Flows:
ET1 At step 11
No Actor events System respond
11.1 Click on icon close.
12.1 Show confirmation message.
13.1 Click on button “Xác nhận”.
14.1 Close confirmation message.

ET2 At step 11
No Actor events System respond
11.2 Click on button “Bổ sung điều khoản”.
12.2 Show “Thêm điều khoản” pop-up.
13.2 Enter information and click on button “Xác
nhận”.
14.2 Close “Thêm điều khoản” pop-up.
15.2 Click on button “Tạo dự án”.
16.2 Show “Dự án” tab with all projects.

ET3 At step 7
No Actor events System respond
7.3 Click on button “Ẩn cuộc trò chuyện”.
8.3 Hide conversation.
9.3 Click on button “Hiện cuộc trò chuyện”.
10.3 Show conversation.

Exception: N/A

Business Rules: BR-1, BR-2, BR-3, BR-5, BI-1, BI-2, BI-3, BI-4, BI-5, BI-6, BI-7

51
Create a showroom

Figure 3- 22 Designer create a showroom

USECASE – UC-DN-07 – SPECIFICATION


Use case No. UC-DN-07 Use case version v2.0
Use case name Create a showroom
Author Pham Dinh Mai
Date 02/07/2018 Priority Medium
Primary actor Designer Secondary actor N/A
Description This function allows the actor to create showroom.
Pre-condition Designer has logged into the system.
Post-condition Create showroom successfully.
Trigger Click on button “+”.

Main flow:
No Actor events System respond
1 Click on avatar at the top-right of website.
2 Show drop-down menu.
3 Click on “Bộ sưu tập”.
4 Show “Bộ sưu tập” tab with all

52
showrooms.
5 Click on button “+”.
6 Show create showroom form.
7 Fill information and then click on button
“Tạo”.
8 Show successful message.
9 Click on button “OK”.
10 Close message and navigate to “Bộ sưu
tập” tab.

Alternative Flows:
Alt1 At step 3
No Actor events System respond
3.1 Click on “Thanh toán”.
4.1 Show “Thanh toán” tab with all
payments.
5.1 Click on “Bộ sưu tập” tab.
6.1 Show “Bộ sưu tập” tab with all
showrooms.
7.1 Click on button “Thêm”.
8.1 Show create showroom form.
9.1 Fill information and then click on button
“Tạo”.
10.1 Show successful message.
11.1 Click on button “OK”.
12.1 Close message and navigate to “Bộ sưu
tập” tab.

Alt2 At step 3
No Actor events System respond
3.2 Click on “Đánh giá”.
4.2 Show “Đánh giá” tab with all reviews.
5.2 Click on “Bộ sưu tập” tab.
6.2 Show “Bộ sưu tập” tab with all
showrooms.
7.2 Click on button “Thêm”.
8.2 Show create showroom form.
9.2 Fill information and then click on button
“Tạo”.
10.2 Show successful message.
11.2 Click on button “OK”.
12.2 Close message and navigate to “Bộ sưu
tập” tab.

Alt3 At step 1
No Actor events System respond
1.3 Click on icon “Dự án”.
2.3 Show “Dự án” tab with all projects.
3.3 Click on “Bộ sưu tập” tab.
4.3 Show “Bộ sưu tập” tab with all
53
showrooms.
5.3 Click on button “Thêm”.
6.3 Show create showroom form.
7.3 Fill information and then click on button
“Tạo”.
8.3 Show successful message.
9.3 Click on button “OK”.
10.3 Close message and navigate to “Bộ sưu
tập” tab.

Alt4 At step 1
No Actor events System respond
1.4 Click on icon “Yêu cầu”.
2.4 Show “Yêu cầu” tab with all requests.
3.4 Click on “Bộ sưu tập” tab.
4.4 Show “Bộ sưu tập” tab with all
showrooms.
5.4 Click on button “Thêm”.
6.4 Show create showroom form.
7.4 Fill information and then click on button
“Tạo”.
8.4 Show successful message.
9.4 Click on button “OK”.
10.4 Close message and navigate to “Bộ sưu
tập” tab.

Extension Flows: N/A

Exception: N/A

Business Rules: BI-1

54
Edit a showroom

Figure 3-23 Designer edit a showroom

USECASE – UC-DN-08 – SPECIFICATION


Use case No. UC-DN-08 Use case version v2.0
Use case name Edit a showroom
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor Designer Secondary actor N/A
Description This function allows the actor to edit showroom.
Pre-condition Designer has logged into the system.
Post-condition Showroom edited successfully.
Trigger Click on button “Chỉnh sửa thông tin”.

Main flow:
No Actor events System respond
1 Click on avatar at the top-right of website.
2 Show drop-down menu.
3 Click on “Bộ sưu tập”.
4 Show “Bộ sưu tập” tab with all

55
showrooms.
5 Click on a showroom.
6 Show showroom detail.
7 Click on button “Chỉnh sửa thông tin”.
8 Show text fields edit information.
9 Enter information and then click on button
“Lưu”.
10 Show successful message.
11 Click on button “OK”.
12 Close message and show previous page.

Alternative Flows:
Alt1 At step 3
No Actor events System respond
3.1 Click on “Thanh toán”.
4.1 Show “Thanh toán” tab with all
payments.
5.1 Click on “Bộ sưu tập” tab.
6.1 Show “Bộ sưu tập” tab with all
showrooms.
7.1 Click on a showroom.
8.1 Show showroom detail.
9.1 Click on button “Chỉnh sửa thông tin”.
10.1 Show text fields edit information.
11.1 Enter information and then click on button
“Lưu”.
12.1 Show successful message.
13.1 Click on button “OK”.
14.1 Close message and navigate to “Bộ sưu
tập” tab.

Alt2 At step 3
No Actor events System respond
3.2 Click on “Đánh giá”.
4.2 Show “Đánh giá” tab with all reviews.
5.2 Click on “Bộ sưu tập” tab.
6.2 Show “Bộ sưu tập” tab with all
showrooms.
7.2 Click on a showroom.
8.2 Show showroom detail.
9.2 Click on button “Chỉnh sửa thông tin”.
10.2 Show text fields edit information.
11.2 Enter information and then click on button
“Lưu”.
12.2 Show successful message.
13.2 Click on button “OK”.
14.2 Close message and navigate to “Bộ sưu
tập” tab.

Alt3 At step 1
56
No Actor events System respond
1.3 Click on icon “Dự án”.
2.3 Show “Dự án” tab with all projects.
3.3 Click on “Bộ sưu tập” tab.
4.3 Show “Bộ sưu tập” tab with all
showrooms.
5.3 Click on a showroom.
6.3 Show showroom detail.
7.3 Click on button “Chỉnh sửa thông tin”.
8.3 Show text fields edit information.
9.3 Enter information and then click on button
“Lưu”.
10.3 Show successful message.
11.3 Click on button “OK”.
12.3 Close message and navigate to “Bộ sưu
tập” tab.

Alt4 At step 1
No Actor events System respond
1.4 Click on icon “Yêu cầu”.
2.4 Show “Yêu cầu” tab with all requests.
3.4 Click on “Bộ sưu tập” tab.
4.4 Show “Bộ sưu tập” tab with all
showrooms.
5.4 Click on a showroom.
6.4 Show showroom detail.
7.4 Click on button “Chỉnh sửa thông tin”.
8.4 Show text fields edit information.
9.4 Enter information and then click on button
“Lưu”.
10.4 Show successful message.
11.4 Click on button “OK”.
12.4 Close message and navigate to “Bộ sưu
tập” tab.

Extension Flows:
ET1 At step 9
No Actor events System respond
9.1 Enter information and click on button
“Hủy”.
10.1 Close text fields edit information.

Exception: N/A

Business Rules: BI-1

57
Delete a showroom

Figure 3-24 Designer delete a showroom

USECASE – UC-DN-09 – SPECIFICATION


Use case No. UC-DN-09 Use case version v2.0
Use case name Delete a showroom
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor Designer Secondary actor N/A
Description This function allows the actor to delete showroom.
Pre-condition Designer has logged into the system.
Post-condition Showroom deleted successfully.
Trigger Click on button “Xóa mẫu thiết kế này”.

Main flow:
No Actor events System respond
1 Click on avatar at the top-right of website.
2 Show drop-down menu.
3 Click on “Bộ sưu tập”.
4 Show “Bộ sưu tập” tab with all

58
showrooms.
5 Click on a showroom.
6 Show showroom detail.
7 Click on button “Xóa mẫu thiết kế này”.
8 Show confirmation message.
9 Click on button “Đồng ý”.
10 Close confirmation message and show
successful message.
11 Click on button “OK”.
12 Close successful message and show
previous page.

Alternative Flows:
Alt1 At step 3
No Actor events System respond
3.1 Click on “Thanh toán”.
4.1 Show “Thanh toán” tab with all
payments.
5.1 Click on “Bộ sưu tập” tab.
6.1 Show “Bộ sưu tập” tab with all
showrooms.
7.1 Click on a showroom.
8.1 Show showroom detail.
9.1 Click on button “Xóa mẫu thiết kế này”.
10.1 Show confirmation message.
11.1 Click on button “Đồng ý”.
12.1 Close confirmation message and show
successful message.
13.1 Click on button “OK”.
14.1 Close successful message and show
previous page.

Alt2 At step 3
No Actor events System respond
3.2 Click on “Đánh giá”.
4.2 Show “Đánh giá” tab with all reviews.
5.2 Click on “Bộ sưu tập” tab.
6.2 Show “Bộ sưu tập” tab with all
showrooms.
7.2 Click on a showroom.
8.2 Show showroom detail.
9.2 Click on button “Xóa mẫu thiết kế này”.
10.2 Show confirmation message.
11.2 Click on button “Đồng ý”.
12.2 Close confirmation message and show
successful message.
13.2 Click on button “OK”.
14.2 Close successful message and show
previous page.

59
Alt3 At step 2
No Actor events System respond
1.3 Click on icon “Dự án”.
2.3 Show “Dự án” tab with all projects.
3.3 Click on “Bộ sưu tập” tab.
4.3 Show “Bộ sưu tập” tab with all
showrooms.
5.3 Click on a showroom.
6.3 Show showroom detail.
7.3 Click on button “Xóa mẫu thiết kế này”.
8.3 Show confirmation message.
9.3 Click on button “Đồng ý”.
10.3 Close confirmation message and show
successful message.
11.3 Click on button “OK”.
12.3 Close successful message and show
previous page.

Alt4 At step 1
No Actor events System respond
1.4 Click on icon “Yêu cầu”.
2.4 Show “Yêu cầu” tab with all requests.
3.4 Click on “Bộ sưu tập” tab.
4.4 Show “Bộ sưu tập” tab with all
showrooms.
5.4 Click on a showroom.
6.4 Show showroom detail.
7.4 Click on button “Xóa mẫu thiết kế này”.
8.4 Show confirmation message.
9.4 Click on button “Đồng ý”.
10.4 Close confirmation message and show
successful message.
11.4 Click on button “OK”.
12.4 Close successful message and show
previous page.

Extension Flows:
ET1 At step 9
No Actor events System respond
9.1 Click on button “Từ chối”.
10.1 Close confirmation message.

Exception: N/A

Business Rules: BI-1

60
Report a designer

Figure 3-25 Report a designer

USECASE – UC-DN-10 – SPECIFICATION


Use case No. UC-DN-10 Use case version v2.0
Use case name Report a designer
Author Pham Dinh Mai
Date 02/7/2018 Priority Low
Primary actor Designer Secondary actor N/A
Description This function allows the actor to report designer.
Pre-condition Designer has logged into the system.
Post-condition The report has been sent to the administrator.
Trigger Click on button “Báo cáo”.

Main flow:
No Actor events System respond
1 The designer is in homepage.
3 Show homepage.
4 Click on the category.
5 Show all showrooms.

61
6 Click on the showroom.
7 Show showroom detail.
8 Click on button “Báo cáo”.
9 Show report pop-up.
10 Enter information and click on button “Xác
nhận”.
11 Show successful message.
12 Click on button “OK”.
13 Close message.

Alternative Flows: N/A

Extension Flows:
ET1 At step 10
No Actor events System respond
10.1 Click outside the report pop-up.
11.1 Close report pop-up.

Exception: N/A

Business Rules: BI-1, BR-6

62
Report a house owner

Figure 3- 26 Designer report a house owner

USECASE – UC-DN-11 – SPECIFICATION


Use case No. UC-DN-11 Use case version v2.0
Use case name Report a house owner
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor Designer Secondary actor N/A
Description This function allows the actor to report house owner to the
administrator.
Pre-condition Designer has logged into the system and have been working with
house owner.
Post-condition The report has been sent to the administrator.
Trigger Click on button “Báo cáo”.

Main flow:
No Actor events System respond
1 The designer is in homepage.
2 Show homepage.

63
3 Click on icon “Dự án”.
4 Show “Dự án” tab with all projects.
5 Click on the project has “Đang làm” status.
6 Show project detail.
7 Click on button “Báo cáo”.
8 Show report pop-up.
9 Enter information and click on button
“Gửi”.
10 Show successful notification and close
pop-up.

Alternative Flows:
Alt1 At step 3
No Actor events System respond
3.1 Click on icon “Yêu cầu”.
4.1 Show “Yêu cầu” tab with all requests.
5.1 Click on “Dự án” tab.
6.1 Show “Dự án” tab with all projects.
7.1 Click on the project has “Đang làm” status.
8.1 Show project detail.
9.1 Click on button “Báo cáo”.
10.1 Show report pop-up.
11.1 Enter information and click on button
“Gửi”.
12.1 Show successful notification and close
pop-up.

Alt2 At step 1
No Actor events System respond
1.2 Click on designer avatar.
2.2 Show drop-down menu.
3.2 Click on “Bộ sưu tập”.
4.2 Show “Bộ sưu tập” tab with all
showrooms.
5.2 Click on “Yêu cầu” tab.
6.2 Show “Yêu cầu” tab with all requests.
7.2 Click on “Dự án” tab.
8.2 Show “Dự án” tab with all projects.
9.2 Click on the project has “Đang làm” status.
10.2 Show project detail.
11.2 Click on button “Báo cáo”.
12.2 Show report pop-up.
13.2 Enter information and click on button
“Gửi”.
14.2 Show successful notification and close
pop-up.

Alt3 At step 1
No Actor events System respond
1.3 Click on designer avatar.
64
2.3 Show drop-down menu.
3.3 Click on “Thanh toán”.
4.3 Show “Thanh toán” tab with all
payments.
5.3 Click on “Yêu cầu” tab.
6.3 Show “Yêu cầu” tab with all requests.
7.3 Click on “Dự án” tab.
8.3 Show “Dự án” tab with all projects.
9.3 Click on the project has “Đang làm” status.
10.3 Show project detail.
11.3 Click on button “Báo cáo”.
12.3 Show report pop-up.
13.3 Enter information and click on button
“Gửi”.
14.3 Show successful notification and close
pop-up.

Alt4 At step 1
No Actor events System respond
1.4 Click on designer avatar.
2.4 Show drop-down menu.
3.4 Click on “Đánh giá”.
4.4 Show “Đánh giá” tab with all reviews.
5.4 Click on “Yêu cầu” tab.
6.4 Show “Yêu cầu” tab with all requests.
7.4 Click on “Dự án” tab.
8.4 Show “Dự án” tab with all projects.
9.4 Click on the project has “Đang làm” status.
10.4 Show project detail.
11.4 Click on button “Báo cáo”.
12.4 Show report pop-up.
13.4 Enter information and click on button
“Gửi”.
14.4 Show successful notification and close
pop-up.

Extension Flows:
ET1 At step 5
No Actor events System respond
5.1 Click on button close at the top-right of
pop-up.
6.1 Close pop-up.

Exception: N/A

Business Rules: BI-1, BR-6

65
Like images

Figure 3- 27 Designer like showroom image

USECASE – UC-DN-12 – SPECIFICATION


Use case No. UC-DN-12 Use case version v2.0
Use case name Like showroom images
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor Designer Secondary actor N/A
Description This function allows the actor to like images.
Pre-condition Designer has logged into the system.
Post-condition Image is liked successfully.
Trigger Click on “heart” icon.

Main flow:
No Actor events System respond
1 The designer is in “showroom-detail” page.
2 Show all information of projects.
3 Click on the image.
4 Zoom the picture.

66
5 Click on icon “Like” at the center of image.
6 Change the like number of the image.

Alternative Flows: N/A

Extension Flows:
ET1 At step 5
No Actor events System respond
5.1 Click on button close at the top-right of
image.
6.1 Close the zoom picture.

Exception: N/A

Business Rules:

Forgot password

Figure 3- 28 Designer forgot password

67
USECASE – UC-DN-13 – SPECIFICATION
Use case No. UC-DN-13 Use case version v2.0
Use case name Forgot password
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor Designer Secondary actor N/A
Description This function allows the actor to recover the forgotten password.
Pre-condition Designer has logged into the system.
Post-condition A link to create a new password is sent to the designer via email.
Trigger Click on “Quên mật khẩu”.

Main flow:
No Actor events System respond
1 Click on button “Đăng nhập”.
2 Show login pop-up.
3 Click on “Quên mật khẩu”.
4 Show reset password form.
5 Enter information then click on button
“Gửi”.
6 Send token to email register account.
7 Open email then clicks on token link.
8 Show create new password form.
9 Enter information and click on button
“Lưu”.
10 Show successful message.
11 Click on button “OK”.
12 Close message and show login pop-up..

Alternative Flows: N/A

Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Enter information and lick on button “Đăng
nhập”.
4.1 Go to UC-CM-04.

ET2 At step 3
No Actor events System respond
3.2 Click on button “Google”.
4.2 Show Google login privilege popup.

ET3 At step 3
No Actor events System respond
3.3 Click on button close at the top-right of
pop-up.
4.3 Navigate to the previous page.

Exception: N/A

68
Business Rules: BI-1, BI-2, BI-3

Change password

Figure 3- 29 Designer change password

USECASE – UC-DN-14 – SPECIFICATION


Use case No. UC-DN-14 Use case version v2.0
Use case name Change password
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor Designer Secondary actor N/A
Description This function allows the actor to change the password.
Pre-condition Designer has logged into the system.
Post-condition Password is changed successfully.
Trigger Click on “Đổi mật khẩu”.

Main flow:
No Actor events System respond
1 Click on your avatar.
69
2 Show dropdown menu.
3 Click on “Đổi mật khẩu”.
4 Show change password form.
5 Enter information to text field and click on
button “Lưu”.
6 Show successful message.

Alternative Flows: N/A

Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Click on “Bộ sưu tập”.
4.1 Show category page with all categorys.

ET2 At step 3
No Actor events System respond
3.2 Click the designer's name.
4.2 Show edit designer profile page with
form edit.

ET3 At step 3
No Actor events System respond
3.3 Click on “Thanh toán”.
4.3 Show payment page with all payments.

ET4 At step 3
No Actor events System respond
3.4 Click on “Đánh giá”.
4.4 Show review page with all reviews.

ET5 At step 3
No Actor events System respond
3.5 Click on “Đăng xuất”.
4.5 Go to UC-DN-01.

Exception: N/A

Business Rules: BI-1

70
Use case diagram of house owner

Figure 3-30 Use case diagram of house owner

71
Logout

Figure 3-31 Designer logout from CI system

USECASE – UC-HO-01 – SPECIFICATION


Use case No. UC-HO-01 Use case version v2.0
Use case name Logout
Author Pham Dinh Mai
Date 02/7/2018 Priority Low
Primary actor House owner Secondary actor N/A
Description This function allows the actor to exit the system.
Pre-condition House owner has logged into the system.
Post-condition Account is logged out successfully.
Trigger Click on button “Đăng xuất”.

Main flow:
No Actor events System respond
1 Click on avatar at the top-right of the
website.
2 Show a drop-down menu.
3 Click on button “Đăng xuất”.
4 The system redirects to the homepage.

Alternative Flows: N/A

72
Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Click the house owner's name.
4.1 Show edit house owner profile form.

ET1 At step 3
No Actor events System respond
3.1 Click on “Đổi mật khẩu”.
4.1 Go to UC-HO-13.

Exception: N/A

Business Rules:

73
Edit profile

Figure 3- 32 House owner edit profile

USECASE – UC-HO-02 – SPECIFICATION


Use case No. UC-HO-02 Use case version v2.0
Use case name Edit profile
Author Pham Dinh Mai
Date 02/7/2018 Priority Low
Primary actor House owner Secondary actor N/A
Description This function allows the actor to edit profile.
Pre-condition House owner has logged into the system.
Post-condition Personal profile is edited by the house owner.
Trigger Click on the house owner’s avatar.

Main flow:
No Actor events System respond
74
1 Click on avatar at the top-right of the
website.
2 Show a drop-down menu.
3 Click on name of user.
4 Show edit house owner profile form.
5 Click on button “Chọn ảnh”.
6 Show image selection window.
7 Click on button “Lưu”.
8 Upload progress bar to 100%.
9 Enter information then click on button
“Gửi”.
10 Show successful message.
11 Click on button “OK”.
12 Close successful message and navigate
to home page.

Alternative Flows: N/A

Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Click on “Đổi mật khẩu”.
4.1 Go to UC-HO-13.

ET2 At step 3
No Actor events System respond
3.2 Click on “Đăng xuất”.
4.2 Go to UC-HO-01.

Exception: N/A

Business Rules: BI-1, BI-2, BI-3, BI-5, BI-6

75
Create a request

Figure 3-33 House owner create a request

USECASE – UC-HO-03 – SPECIFICATION


Use case No. UC-HO-03 Use case version v1.0
Use case name Create a request
Author Pham Dinh Mai
Date 22/05/2018 Priority Medium
Primary actor House owner Secondary actor N/A
Description This function allows the actor to create request.
Pre-condition House owner has logged into the system.
Post-condition Designer is received the request from the house owner.
Trigger Click on button “Gửi yêu cầu”.

Main flow:
No Actor events System respond
76
1 Click the category name in the home page.

2 Show all categorys.


3 Click on the showroom in the “category”
page.
4 Show showroom detail page.
5 Click on button “Gửi yêu cầu”
6 Show “Gửi yêu cầu” pop-up.
7 Enter information then click on button “Gửi
yêu cầu”.
8 Show successful message.
9 Click on button “OK”.
10 Close message and pop-up.

Alternative Flows:
Alt1 At step 1
No Actor events System respond
1.1 Enter the keyword in the search field and
click on “Tìm kiếm” button.
2.1 Show search results and number of
results found.
3.1 Click on a designer in the results list.
4.1 Show showroom detail page.

Extension Flows:
ET1 At step 7
No Actor events System respond
7.1 Click on button close at the top-right of the
dialog.
8.1 Show previous page.

Exception: N/A

Business Rules: BI-1, BI-2, BI-5, BR-1

77
Send messages

Figure 3-34 House owner send messages

USECASE – UC-HO-04 – SPECIFICATION


Use case No. UC-HO-04 Use case version v1.0
Use case name Send messages
Author Pham Dinh Mai
Date 22/05/2018 Priority High
Primary actor House owner Secondary actor
Description This function allows the actor to send message to designer.
Pre-condition House owner is logged into the system and the request is sent to
designer.
Post-condition The message is sent to the designer.
Trigger Click on icon “Yêu cầu”.

Main flow:
78
No Actor events System respond
1 Click on icon “Yêu cầu”.

2 Show “Yêu cầu” tab with all requests.


3 Click on a request.
4 Show message box.
5 Click the text box and enter the message
then click the submit button.
6 Send this message to the house owner.

Alternative Flows:
Alt1 At step 5
No Actor events System respond
5.1 Click the text box and enter the message
then press the “Enter” key from keyboard.

Alt2 At step 1
No Actor events System respond
1.2 Click on icon “Dự án”.
2.2 Show all projects.
3.2 Click on “Yêu cầu” tab.
4.2 Show “Yêu cầu” tab with all requests.
5.2 Click on a request.
6.2 Show message box.
7.2 Click the text box and enter the message
then click the submit button.
8.2 Send this message to the house owner.

Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Enter search keyword to “Tìm kiếm” field.
4.1 Show all requests match search
keyword.

ET2 At step 3
No Actor events System respond
3.2 Click on “Cũ hơn”.
4.2 Show more requests.

Exception: N/A

Business Rules: BI-1, BI-2, BI-5, BR-1

79
Accept a CI-project

Figure 3-35 House owner accept a CI-project

USECASE – UC-HO-05 – SPECIFICATION


Use case No. UC-HO-05 Use case version v1.0
Use case name Accept a CI-project
Author Pham Dinh Mai
Date 22/05/2018 Priority High
Primary actor House owner Secondary actor N/A
Description This function allows the actor to view project.
Pre-condition House owner is logged in CI sytem and received the project offer from
designer.
Post-condition The project is accepted by house owner.
Trigger Click on button “Xác nhận”.

Main flow:
80
No Actor events System respond
1 Click on icon “Dự án”.
2 Show all projects.
3 Click on a project that have "Mới" status.
4 Show project detail.
5 Click on button “Xác nhận”.
6 Show successful message.
Navigate to “Dự án” tab, status of
project has changed to “Đang chờ”.

Alternative Flows:
Alt1 At step 1
No Actor events System respond
1.1 Click on icon “Yêu cầu”.
2.1 Navigate to “request” page.
3.1 Click on “Dự án” tab.
4.1 Navigate to “project” page.
5.1 Click on a project that has a "Mới" status.
6.1 Navigate to “project-detail” page.
7.1 Click on button “Xác nhận”.
8.1 Show successful message.
Navigate to “Dự án” tab, status of
project has changed to “Đang chờ”.

Extension Flows:
ET1 At step 6
No Actor events System respond
5.1 Click on button “Cần sửa đổi”.
6.1 Navigate to “Dự án” tab, status of
project has changed to “Đã từ chối”.

Exception: N/A

Business Rules: BR-1, BR-2, BR-3, BR-5

81
View a CI-project

Figure 3-36 House owner view a CI-project

USECASE – UC-HO-06 – SPECIFICATION


Use case No. UC-HO-06 Use case version v1.0
Use case name View a CI-project
Author Pham Dinh Mai
Date 22/05/2018 Priority High
Primary actor House owner Secondary actor N/A
Description This function allows the actor to view project.
Pre-condition House owner is logged in CI system and has at least one CI-project.
Post-condition The project can view by house owner.
Trigger Click on icon “Dự án”.

Main flow:
No Actor events System respond
82
1 Click on icon “Dự án”.
2 Show all projects.
3 Click on a project.
4 Show project detail.

Alternative Flows:
Alt1 At step 1
No Actor events System respond
1.1 Click on icon “Yêu cầu”.
2.1 Show “Yêu cầu” tab with all requests.
3.1 Click on “Dự án” tab.
4.1 Show all projects.
5.1 Click on a project.
6.1 Show project detail.

Extension Flows: N/A

Exception: N/A

Business Rules: BR-1, BR-2, BR-3, BR-5

83
Reject a CI-project

Figure 3-37 House owner reject a CI-project

USECASE – UC-HO-07 – SPECIFICATION


Use case No. UC-HO-07 Use case version v1.0
Use case name Reject a CI-project
Author Pham Dinh Mai
Date 22/05/2018 Priority Medium
Primary actor House owner Secondary actor N/A
Description This function allows the actor to reject a project.
Pre-condition House owner is logged in CI system and received the project offer
from designer.
Post-condition The project is rejected by house owner.
Trigger Click on button “Cần sửa đổi”.

Main flow:
84
No Actor events System respond
1 Click on icon “Dự án”.
2 Show all projects.
3 Click on a project that has a "Mới" status.
4 Show project detail.
5 Click on button “Cần sửa đổi”.
6 Navigate to “Dự án” tab, status of
project has changed to “Đã từ chối”.

Alternative Flows:
Alt1 At step 1
No Actor events System respond
1.1 Click on icon “Yêu cầu”.
2.1 Navigate to “Yêu cầu” tab with all
requests.
3.1 Click on “Dự án” tab.
4.1 Show all projects.
5.1 Click on a project that has a "Mới" status.
6.1 Show project detail.
7.1 Click on button “Xác nhận”.
8.1 Show successful message.
Navigate to “Dự án” tab, status of
project has changed to “Đang chờ”.

Extension Flows:
ET1 At step 5
No Actor events System respond
5.1 Click on button “Xác nhận”.
6.1 Show successful message.
Navigate to “Dự án” tab, status of
project change to “Đang chờ”.

Exception: N/A

Business Rules: BR-1, BR-2, BR-3, BR-5

85
Accept a payment

Figure 3- 38 House owner accept a payment

USECASE – UC-HO-08 – SPECIFICATION


Use case No. UC-HO-08 Use case version v1.0
Use case name Accept a payment
Author Pham Dinh Mai
Date 22/05/2018 Priority High
Primary actor House owner Secondary actor N/A
Description This function allows the actor to accept a payment.
Pre-condition 1. House owner is logged in CI system.
2. Designer uploaded the document.
3. The payment milestone is in progess.
Post-condition The payment is accepted by the house owner and a notification is
sent to designer.
Trigger Click on button “Duyệt công việc”.
86
Main flow:
No Actor events System respond
1 Click on icon “Dự án”.
2 Show all projects.
3 Click the project has the status of “Đang
làm”.
4 Show project detail.
5 Click on button “Duyệt công việc”.
6 Show confirmation message.
7 Click on button “Đồng ý”.
8 Close confirmation message and show
successful message.
9 Click on button “OK”.
10 Payment status has changed to “Đang
chuyển tiền” status.

Alternative Flows:
Alt1 At step 1
No Actor events System respond
1.1 User clicks on icon “Yêu cầu”.
2.1 Show “Yêu cầu” tab with all requests.
3.1 Click on tab “Dự án”.
4.1 Show all projects.
5.1 Click the project has the status of “Đang
làm”.
6.1 Show project detail.
7.1 Click on button “Duyệt công việc”.
8.1 Show confirmation message.
9.1 Click on button “Đồng ý”.
10.1 Close confirmation message and show
successful message.
11.1 Click on button “OK”.
12.1 Payment status has changed to “Đang
chuyển tiền” status.

Alt2 At step 7
No Actor events System respond
7.2 Click on button “Hủy bỏ”.
8.2 Close confirmation message.

Extension Flows:
ET1 At step 5
No Actor events System respond
5.1 Click on button “Đóng dự án”.
6.1 Show confirmation message.
7.1 Click on button “OK”.
8.1 Close message and navigate to
“project” page, project status has
changed to “Đóng”.
87
Exception: N/A

Business Rules: BR-1, BR-2, BR-3, BR-4, BR-5

Close a CI-project

Figure 3-39 House owner close a CI-project

USECASE – UC-HO-09 – SPECIFICATION


Use case No. UC-HO-09 Use case version v1.0
Use case name Close a project
Author Pham Dinh Mai
Date 22/05/2018 Priority High
Primary actor House owner Secondary actor N/A
88
Description This function allows the actor to close CI-project.
Pre-condition House owner is logged in CI system and is working on a CI-project.
The payment is in progress and it is the last payment milestone.
Post-condition Project is closed.
Trigger Click on button “Đóng dự án”.

Main flow:
No Actor events System respond
1 Click on icon “Dự án”.
2 Show all projects.
3 Click on a project has the “Đang làm”
status.
4 Show project detail.
5 Click on button “Đóng dự án”.
6 Show rate pop-up.
7 Evaluate the quality of work of the
designer.
8 Navigate to “project” page, status of
project has changed to “Đóng”.

Alternative Flows:
Alt1 At step 1
No Actor events System respond
1.1 User clicks on icon “Yêu cầu”.
2.1 Show “Yêu cầu” tab with all requests.
3.1 Click on tab “Dự án”.
4.1 Show all projects.
5.1 Click on a project has the “Đang làm”
status.
6.1 Show project detail.
7.1 Click on button “Đóng dự án”.
8.1 Show rate pop-up.
9.1 Evaluate the quality of work of the
designer.
10.1 Navigate to “project” page, status of
project has changed to “Đóng”.

Extension Flows:
ET1 At step 5
No Actor events System respond
5.1 Click on button close at the top-right of
pop-up.
6.1 Close rate pop-up, status of project is
“Đang làm”.

Exception: N/A

Business Rules: BR-1, BR-2, BR-3, BR-4, BR-5

89
Like showroom image

Figure 3-40 House owner like an image in showroom

USECASE – UC-HO-10 – SPECIFICATION


Use case No. UC-HO-10 Use case version v2.0
Use case name Like showroom image
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor House owner Secondary actor N/A
Description This function allows the actor to like images from the designer’s
showroom.
Pre-condition House owner is logged in CI system and is viewing an image.
Post-condition Image is successfully liked.
Trigger Click on “heart” icon.

Main flow:
90
No Actor events System respond
1 User is in homepage.
2 Show homepage.
3 Click on a category.
4 Show all categorys.
5 Click on a showroom.
6 Show showroom detail.
7 Click on a picture.
8 Zoom the picture.
9 Click on icon heart at the center of image.
10 Change the like number of the image.

Alternative Flows: N/A

Extension Flows:
ET1 At step 7
No Actor events System respond
7.1 Click on button close at the top-right of
image.
8.1 Close the zoom picture.

Exception: N/A

Business Rules:

91
Report a designer

Figure 3-41 House owner report a designer

USECASE – UC-HO-11 – SPECIFICATION


Use case No. UC-HO-11 Use case version v2.0
Use case name Report a designer
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor House owner Secondary actor N/A
Description This function allows the actor to report designer.
Pre-condition House owner is logged in CI system.
Post-condition The report has been sent to the administrator.
Trigger Click on button “Báo cáo”.

Main flow:
No Actor events System respond
92
1 User is in homepage.
2 Show homepage.
3 Click on a category.
4 Show all categorys.
5 Click on a showroom.
6 Show showroom detail.
7 Click on button “Báo cáo”.
8 Show report pop-up.
9 Enter information and click on button “Xác
nhận”.
10 Show successful message.
11 Click on button “OK”.
12 Close message.

Alternative Flows: N/A

Extension Flows:
ET1 At step 9
No Actor events System respond
9.1 Click on button close at the top-right of
pop-up.
10.1 Close report pop-up.

Exception: N/A

Business Rules: BI-1, BR-6

93
Forgot password

Figure 3-42 House owner retrieve the forgot password

USECASE – UC-HO-12 – SPECIFICATION


Use case No. UC-HO-12 Use case version v2.0
Use case name Forgot password
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor House owner Secondary actor N/A
Description This function allows the actor to recover the password.
Pre-condition - House owner is logged in CI system.
Post-condition A link to create a new password is sent to the house owner via email.
Trigger Click on “Quên mật khẩu”.

Main flow:
No Actor events System respond
1 Click on button “Đăng nhập”.
2 Show login pop-up.
3 Click on “Quên mật khẩu”.
4 Show reset password form.

94
5 Enter information then click on button
“Gửi”.
6 Send token to email register account.
7 Open email then clicks on token link.
8 Show create new password form.
9 Enter information and click on button
“Lưu”.
10 Show successful message.
11 Click on button “OK”.
12 Close message and show login pop-up.

Alternative Flows: N/A

Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Enter information and lick on button “Đăng
nhập”.
4.1 Go to UC-CM-04.

ET2 At step 3
No Actor events System respond
3.2 Click on button “Google”.
4.2 Show Google login privilege popup.

ET3 At step 3
No Actor events System respond
3.3 Click on button close at the top-right of
pop-up.
4.3 Navigate to the previous page.

Exception: N/A

Business Rules: BI-1, BI-2, BI-3

95
Change password

Figure 3-43 House owner change password

USECASE – UC-HO-13 – SPECIFICATION


Use case No. UC-HO-13 Use case version v2.0
Use case name Change password
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor House owner Secondary actor N/A
Description This function allows the actor to change the password.
Pre-condition House owner is logged into CI system.
Post-condition The password is changed successfully.
Trigger Click on “Đổi mật khẩu”.

Main flow:
No Actor events System respond
1 Click on your avatar.
2 Show dropdown menu.
3 Click on “Đổi mật khẩu”.
4 Show change password form.

96
5 Enter information to text field and click on
button “Lưu”.
6 Show successful message.

Alternative Flows: N/A

Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Click the house owner’s name.
4.1 Show edit house owner profile page
with form edit.

ET2 At step 3
No Actor events System respond
3.2 Click on “Đăng xuất” button.
4.2 Go to UC-HO-01.

Exception: N/A

Business Rules: BI-1

97
Admin Use case diagram

98
View user profile

Figure 3-44 Admin view all user profile

USECASE – UC-AD-01 – SPECIFICATION


Use case No. UC-AD-01 Use case version v2.0
Use case name View users profile
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor Administrator Secondary actor
Description This function allows the actor to view all user profiles.
Pre-condition Admin is logged into CI admin system.
Post-condition All the profiles are successfully shown on admin page.
Trigger Click on button “User”.

Main flow:
No Actor events System respond
1 Click on button “User”
2 Show user management page.

Alternative Flows: N/A


99
Extension Flows: N/A

Exception: N/A

Business Rules: N/A

Ban user

Figure 3-45 Admin ban a user

USECASE – UC-AD-02 – SPECIFICATION


Use case No. UC-AD-02 Use case version v2.0
Use case name Ban user
Author Pham Dinh Mai
Date 02/07/2018 Priority Low
Primary actor Administrator Secondary actor Low
Description This function allows the actor to ban user.
Pre-condition Admin is logged into CI admin system.
100
Post-condition User is banned by the admin.
Trigger Click on icon “Ban”.

Main flow:
No Actor events System respond
1 Click on button “User”.
2 Show user management page.
3 Click on icon “Ban” on the right of user.
4 Show confirmation message.
5 Click on button “OK”.
6 Close confirmation message and show
successful message.
7 Click on button “OK”.
8 Close successful message, "Ban" icon
on the right of the user disappear.

Alternative Flows: N/A

Extension Flows:
ET1 At step 5
No Actor events System respond
5.1 Click on button “OK”.
6.1 Close confirmation message.

ET2 At step 3
No Actor events System respond
3.2 Enter search keyword and click on search
icon.
4.2 Show all results match search keyword.

ET3 At step 3
No Actor events System respond
3.3 Click on button “Next”.
4.3 Next page.

ET4 At step 3
No Actor events System respond
3.4 Click on button “ADD PROFESSIONAL”.
4.4 Show “Thêm Professional” form.
5.4 Enter information and click on button
“SAVE”.
6.4 Show successful message.
7.4 Click on button “OK”.
8.4 Close successful message.

Exception: N/A

Business Rules:

101
View a report

Figure 3-46 Admin view a report

USECASE – UC-AD-03 – SPECIFICATION


Use case No. UC-AD-03 Use case version v1.0
Use case name View a report
Author Pham Dinh Mai
Date 22/07/2018 Priority High
Primary actor Administrator Secondary actor
Description This function allows the actor to view report.
Pre-condition - Admin has logged into the system.
Post-condition - Success:
+ Report viewed by admin.
Trigger  Click on button “Report”.

Main flow:
No Actor events System respond
1 Click on button “Report”.
2 Show report management page.

102
Alternative Flows: N/A

Extension Flows: N/A

Exception:
ET1 At step 3
No Actor events System respond
3.1 Click on button “Next”.
4.1 Next page.

Business Rules:

Lock a project

Figure 3- 47 Admin lock a project

USECASE – UC-AD-04 – SPECIFICATION


Use case No. UC-AD-04 Use case version v1.0
Use case name Lock a project
103
Author Pham Dinh Mai
Date 22/5/2018 Priority Medium
Primary actor Administrator Secondary actor N/A
Description This function allows the actor to lock project.
Pre-condition Admin is logged into CI admin system.
Post-condition Project locked by admin.
Trigger Click on radio button “LOCK”.

Main flow:
No Actor events System respond
1 Click on button “Project”.
2 Show project management page.
3 Click the "Edit" icon to the right of a
project.
4 Show project detail.
5 Click on radio button “Lock”.
6 Show successful message.
7 Click on button “OK”.
8 Close successful message, project
status has changed to “Lock”.

Alternative Flows: N/A

Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Enter search keyword and click on search
icon.
4.1 Show all results match search keyword.

ET2 At step 3
No Actor events System respond
3.2 Click on button “Next”.
4.2 Next page.

Exception: N/A

Business Rules:

104
Active a project

Figure 3- 48 Admin active a project

USECASE – UC-AD-05 – SPECIFICATION


Use case No. UC-AD-05 Use case version v1.0
Use case name Active a project
Author Pham Dinh Mai
Date 22/05/2018 Priority High
Primary actor Administrator Secondary actor N/A
Description This function allows the actor to active project.
Pre-condition Admin is logged into CI admin system.
Post-condition Project is activated by admin.
Trigger Click on button “ACTIVE”.

Main flow:
No Actor events System respond
1 Click on button “Project”.
2 Show project management page.
3 Click the "Edit" icon to the right of a project
that has the status "PENDING".
105
4 Show project detail.
5 Click on button “ACTIVE”.
6 Show confirmation message.
7 Click on button “OK”.
8 Show successful message.
9 Click on button “OK”.
10 Close successful message, project
status has changed to “RUNNING”.

Alternative Flows: N/A

Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Enter search keyword and click on search
icon.
4.1 Show all results match search keyword.

ET2 At step 3
No Actor events System respond
3.2 Click on button “Next”.
4.2 Next page.

Exception: N/A

Business Rules:

106
Active a payment

Figure 3- 49 Admin active a payment

USECASE – UC-AD-06 – SPECIFICATION


Use case No. UC-AD-06 Use case version v1.0
Use case name Active a payment
Author Pham Dinh Mai
Date 22/05/2018 Priority High
Primary actor Administrator Secondary actor N/A
Description This function allows the actor to active payment.
Pre-condition Admin is logged into CI admin system.
Post-condition Payment is activated by admin.
Trigger Click on icon “Active”.

Main flow:
No Actor events System respond
1 Click on button “Project”.
2 Show project management page.
3 Click the "Edit" icon to the right of a project
that has the status "WORKING".
107
4 Show project detail.
5 Click on icon “Active”.
6 Show confirmation message.
7 Click on button “OK”.
8 Show successful message.
9 Click on button “OK”.
10 Close successful message, payment
status has changed to “PAID”.

Alternative Flows: N/A

Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Enter search keyword and click on search
icon.
4.1 Show all results match search keyword.

ET2 At step 3
No Actor events System respond
3.2 Click on button “Next”.
4.2 Next page.

ET2 At step 7
No Actor events System respond
7.3 Click on button “Hủy”.
8.3 Close confirmation message.

Exception: N/A

Business Rules:

108
Close a project

Figure 3-50 Admin close a project

USECASE – UC-AD-07 – SPECIFICATION


Use case No. UC-AD-07 Use case version v1.0
Use case name Close a project
Author Pham Dinh Mai
Date 22/05/2018 Priority Medium
Primary actor Administrator Secondary actor N/A
Description This function allows the actor to active payment.
Pre-condition Admin has logged into the system.
Post-condition Payment is activated by admin.
Trigger Click on radio button “CLOSING”.

Main flow:
No Actor events System respond
1 Click on button “Project”.
2 Show project management page.
3 Click the "Edit" icon to the right of a
project.
109
4 Show project detail.
5 Click on radio button “CLOSING”.
6 Show successful message.
7 Click on button “OK”.
8 Close successful message, payment
status has changed to “CLOSE”.

Alternative Flows: N/A

Extension Flows:
ET1 At step 3
No Actor events System respond
3.1 Enter search keyword and click on search
icon.
4.1 Show all results match search keyword.

ET2 At step 3
No Actor events System respond
3.2 Click on button “Next”.
4.2 Next page.

Exception: N/A

Business Rules:

3.6 Non – functional requirements


3.6.1 Security
 Database Security: Creative Inside is built from Spring framework, so the potential risk of
SQL Injection is mitigated to the lowest.
 Password Encryption: Password input into a database is using the Bcrypt ( Why is Bcrypt? [7]) for
hashing.
 Authentication: Creative Inside implements Oauth2[8] authentication protocols for both client
and server side to improve the security.
 Cross Site Scripting (XSS): Creative Inside using Angular4 form validation [9] in client side with Hibernate
in server side to protect the user from cross-site scripting.

3.6.2 Performance
Client-Side validation: Improve user experience by validation performed quickly respond to
notify users to re-input fields. The network traffic does not require so it helps server to
perform better.
3.6.3 Usability
 The search is display with total result.
 The user interface for each web page is design toward the easy of use as following
example:

110
Figure 3-51 Mouse hover image

Figure 3-52 Mouse hover in the title

3.6.4 Scalability
The CI system is available for further web development or mobile app development when
using service API.

111
3.7 Entity relationship diagram

Figure 3-53 ERD for CI system

112
Chapter 4 - Software Architecture Design
4.1 Purpose
This purpose of this chapter shows the software architecture system design using a top-down
approach, from the high-level design to detail design description for each section.

 The high-level design of system includes:


 Context diagram
 Layer architecture diagram
 Component diagram
 The detail design of system includes:
 Package diagram
 Class diagram
 User interface design
 Sequence diagram
 Database design

113
4.2 High level system architecture overview
4.2.1 Context diagram

Figure 4- 54 Context Diagram

114
(1): https://creative-inside.tk/

(2): https://creative-inside-api.tk/

Architecture explanation
HTML5, CSS3

Using HTML5 and CSS3 provides advantages to businesses that develop and deploy web
content and web applications, to create refined and accurate web pages and web systems that
operate across devices, operating systems and web browsers.

Angular 4, Angular-http-server

Angular 4 is a JavaScript framework for building web applications and apps in JavaScript,
html, and TypeScript, which is a superset of JavaScript. Desktop development is much easier when
mobile performance issues are handled first. Thus, Angular first handles mobile development.
Angular follows modularity, similar functionalities are kept together in same modules. This gives
Angular a lighter & faster core.

Node.js is an application runtime environment that allows you to write server-side applications in
JavaScript. NodeJS is better than other technologies because most of its functionality are
asynchronous.

MySQL

MySQL is a powerful, free open-source database management system that has been around for
years. It is very stable and has a big community that helps maintain, debug and upgrade it.

Tomcat server

Apache Tomcat, is a free open source web server and servlet container developed by the Apache
Software Foundation, it is the HTTP web server that run your java code. It is easily to configuration
and ease of use, suitable for java base application.

115
Spring Oauth2

OAuth2 is a standardized authorization protocol. Spring Security OAuth project provides all the
necessary API we might need in order to develop an OAuth2 compliant implementation using Spring.

4.2.2 Layer architecture diagram

Figure 4- 55 Layer architecture

Explaination
Web application
Angular4 components components for building web app
Web services
User interface User interface API for any application want to use.
Web interface User interface which is only connected by HTTP protocol (HTTP 1.1).
Remote interface User interface which is connected by other protocol such as WebSocket
protocol.
Business Implement and store all businesses.
Authoziration server authorizes user and stores user session.
Configuration Store all application configs in system
Repository Store query to use in database
Data transfer object Store object classes to respond to client
Entity Store ORM classes which is mapped tables in database
116
Util Store static classes and contain static method whichs are ready to use in
CI system

4.2.3 Component diagram

Component Module Description


Web application Directive Change the DOM layout
Template Syntax to express the dynamic part of our HTML
Service (Web application) Share information among classes that don't know
each other
Component Decorator that marks a class as an Angular
component and provides configuration metadata
that determines how the component should be
processed, instantiated, and used at runtime.
Web service Token management Manage all token
Authorization server Authorize and authenticate user
Controller (Rest API) the way the HTTP response body is created
Service (Rest API) representational state transfer (REST) technology
Log Recording of activity.
117
Data access Entity lightweight persistence domain object
Repository Java platform API
Model Utils Java collection frameworks.
Data access object provides an abstract interface to database
Enum Consisting data type that can be used
Event handle Handle event
Exception Categorize Exception
MySQL MySQL Save data to storage.

4.3 Detail design


4.3.1 Package diagram

Figure 4- 56 Package diagram

Package Description
Dto Use Common data transfer object classes to respond to client.
Builder Builder classes which are static classes and contain static methods to
share public in CI system.
Respond Common base respond object classes
Repository Common Group of interfaces, implementing and implemented classes that store
queries.
Base Base classes which are written in generic type
Controller Base Base classes which are written in generic type
Services Base Base classes which are written in generic type
Common Group of interfaces, implemented classes and implementing classes that
store logic services.
Configs Application config classes
Utils Util classes which are static classes and contain static methods to share
public in system
Exception Exception classes for handling exception.
Enum Enum classes
Event Event classes
Listener Listener event classes
Domain Object classes which are ORM classes and are mapped to tables in
databases

118
4.3.2 Class diagram
Module public controller

Figure 4-57 Module public controller

Base controller
Class BaseController
Description Abstract controller class
Source File BaseController.java
Package src\main\java\com\controller\base\
Attribute Name Access Data type
modifier
objectMapper private ObjectMapper
Methods Name Access Return type
modifier
getLogger protected Logger
getService protected IBaseService
existById public RespondEntity<?>
findById public RespondEntity<?>
findAll public RespondEntity<?>
count public RespondEntity<?>
save public RespondEntity<?>
update public RespondEntity<?>
findAllByExampleLike public RespondEntity<?>
findUnique public RespondEntity<?>
deleteById public RespondEntity<?>
findAllByExampleLike protected RespondEntity<?>
findUnique protected RespondEntity<?>
count protected RespondEntity<?>
save protected RespondEntity<?>
update protected RespondEntity<?>
findAll protected RespondEntity<?>
deleteById protected RespondEntity<?>
findById protected RespondEntity<?>
existsById protected RespondEntity<?>
119
createOrder private Order
createPageRequest private PageRequest

IBaseService
Class IBaseService
Description Interface
Source File IBaseService.java
Package com/services/base/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
count public Optional<Long>
saveOrUpdate public Optional<D>
save public Optional<ILong>
delete public Void
existsById public Boolean
deleteAll public Void
findAll public <List<D>>
findAllByExampleLike public Optional<List<D>>
findUnique public Optional<D>
findById public Optional<D>
findAll public Optional<List<D>>
findAll public Optional<Page<D>>

PublicController
Class PublicController
Description Class
Source File PublicController.java
Package com/controller/
Attribute Name Access Data type
modifier
service default IPublicService
showroomCategoryService default IShowroomCategoryService
companyService default ICompanyService
showRoomService default IShowRoomService
showRoomRateService default IShowRoomRateService
Methods Name Access Return type
modifier
search public RespondEntity<?>
search public RespondEntity<?>
suggest public RespondEntity<?>
findPro public RespondEntity<?>
findShowRoom default RespondEntity<?>
findProfessionalByID default RespondEntity<?>
findProfessionalByID default RespondEntity<?>

120
findShowRoomByProfessionalID default RespondEntity<?>
findImageShowRoomBySRId default RespondEntity<?>
findShowroomCategory default RespondEntity<?>
findShowByCateID default RespondEntity<?>
contact public RespondEntity<?>
rateShowRoom default RespondEntity<?>

IPublicService
Class IPublicService
Description Interface
Source File IPublicService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
suggest public Optional<List<SearchData>>
search public Optional<List<SearchData>>
findProInfor public Optional<Page<ProfessionalDetailDto>>
findProfessionalById public Optional< ProfessionalDetailDto>
findShowRoomByProfessionalID public Optional<List<ShowroomDto>>
searchType public Optional<List<SearchData>>
findReviewByProId public Optional<List<ReviewDto>>
findImageShowroomById public Optional<List<ImageShowroomDto>>

IGenericDAO
Class IGenericDAO
Description Interface
Source File IGenericDao.java
Package \src\main\java\com\repository\base\core\
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
Save public Optional<ID>
saveOrUpdate public Void
count public Optional<Long>
deleteAll public Void
findAll public Void
findAll public Optional<List<T>>
findAllByExampleLike public Optional<List<T>>
findUnique public Optional<T>
findById public Optional<T>
existsById public Boolean
clear public Void

121
flush public Void
getSession public Session
getCriteria public Criteria
getSessionFactory public SessionFactory

BaseServiceImpl
Class BaseServiceImpl
Description Abstract class
Source File BaseServiceImpl.java
Package com/services/base/impl/
Attribute Name Access Data type
modifier
getLogger protecte Logger
d
getRepository protecte IGenericDAO
d
convertToDto protecte D
d
convertToEntity protecte T
d
Methods Name Access Return type
modifier
save public Optional<ID>
count public Optional<Long>
saveOrUpdate public Optional
delete public Void
existsById public Boolean
deleteAll public Void
findAll public Optional<List<D>>
findAllByExampleLike public Optional<List<D>>
findUnique public Optional<D>
findById public Optional<D>
findAll public Optional<List<D>>
findAll public Optional<Page<D>>

IShowroomService
Class IShowroomService
Description Interface
Source File IShowRoomService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findShowroom public Optional<Page<ShowRoomDto>>
saveShowroom public Optional< ShowRoomDto>
findShowroomByPro public Optional<Page<ShowRoomDto>>
122
findShowroomById public Optional<ShowRoomDto>
findContainName public Optional<List<ShowRoomDto>>
findDetailContainName public Optional<List<ShowRoomDto>>
findShowRoomByCateId public Optional<List<ShowRoomDto>>

PublicServiceImpl
Class PublicServiceImpl
Description Public class
Source File PublicServiceImpl.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
professionalDetailRepository default IProfessionalDetailRepository
companyRepository default ICompanyRepository
productRepository default IProductRepository
tagRepository default ITagRepository
companyService default ICompanyService
productService default IProductService
projectRepository default IProjectRepository
tagService default ITagService
professionalDetailService default IProfessionalDetailService
imageShowroomRepository default IImageShowroomRepository
showRoomService default IShowRoomService
projectService private IProjectService
Methods Name Access Return type
modifier
suggest public Optional<List<SearchData>>
search public Optional<List<SearchData>>
findProInfo public Optional<Page<ProfessionalDetailDto>>
findProfessionalById public Optional<ProfessionalDetailDto>
findShowroomByProfessionalId public Optional<List<ShowroomDto>>
searchType public Optional<List<SearchData>>
findReviewByProId public Optional<List<ReviewDto>>
findImageShowroomById public Optional<List<ImageShowroomDto>>
convertReviewDto private ReviewDto
convertToDto private ProfessionalDetailDto
createPageRequest private PageRequest

AbstractGenericDAO
Class AbstractGenericDAO
Description Abstract class
Source File AbstractGenericDao.java
Package com/repository/base/impl/
Attribute Name Access Data type
modifier
entityClass protecte Class<T>
d

123
sessionFactory private SessionFactory
Methods Name Access Return type
modifier
getSession public Session
getCriteria public Criteria
count public Optional<Long>
findById public Optional<T>
save public Optional<ID>
saveOrUpdate public Void
findAll public Optional<List<T>>
findAll public Optional<Page<T>>
delete public Void
deleteAll public Void
findAll public Optional<List<T>>
findAllByExampleLike public Optional<List<T>>
findUnique public Optional< <T>
existsById public Boolean
clear public Void
flush public Void

IShowroomRateService
Class IShowroomRateService
Description Interface
Source File IShowRoomRateService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
likeShowRoom public Optional<Boolean>
likeShowRoom public Optional<Long>
checkLike public Optional<Boolean>

ShowroomCategoryServiceImpl
Class ShowRoomCategoryServiceImpl
Description Public class
Source File ShowRoomCategoryServiceImpl.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
showRoomCategoryRepository default IShowroomCategoryRepository
Methods Name Access Return type
modifier
getLogger protecte Logger
d
124
getBaseRepository protecte IGenericDAO
d
convertToDto protecte ShowroomCategoryDto
d
convertToEntities protecte ShowroomCategory
d

ShowroomServiceImpl
Class ShowRoomServiceImpl
Description Public class
Source File ShowRoomServiceImpl.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
showRoomRepository default IShowRoomRepository
imageShowRoomRepository default IImageShowRoomRepository
professionalDetailRepository default IProfessionalDetailRepository
companyService default ICompanyService
showRoomLikeRepository default IShowRoomLikeRepository
showRoomRateRepository default IShowRoomRateRepository
companyRepository default ICompanyRepository
showRoomCategoryRepository default IShowRoomCategoryRepository
objectMapper default ObjectMapper
Methods Name Access Return type
modifier
getLogger protecte Logger
d
getBaseRepository protecte IGenericDAO
d
convertToDto protecte ShowRoomDto
d
findById public Optional< ShowRoomDto>
convertToEntities protecte ShowRoom
d
imageShowRoomEntity private ImageShowRoom
convertTagEntity private Tag
convertTagDto private TagDto
convertToImageShowroom private ImageShowRoomDto
findShowRoom public Optional<Page<ShowRoomDto>>
saveShowRoom public Optional< ShowRoomDto>
findShowRoomByPro public Optional<Page<ShowRoomDto>>
findShhowRoomById public Optional<ShowRoomDto>
findContainName public Optional<List<ShowRoomDto>>
findDetailContainName public Optional<List<ShowRoomDto>>
findShowRoomByCategory public Optional<List<ShowRoomDto>>
handlerOneShowRoom public ShowRoomDto
getPageDto private Page<ShowRoomDto>

125
IShowRoomRepository
Class IShowRoomRepository
Description Interface
Source File IShowRoomRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findShowRoom public Optional<Page<Showroom>>
findShowRoomByProfessional public Optional<Page<Showroom>>
findShowRoomByProfessional public Optional<List<Showroom>>
findContainName public Optional< List <Showroom>>
findShowroomByCategoryId public Optional< List <Showroom>>
findShowRoomById public Optional <Showroom>

IImageShowRoomRepository
Class IImageShowRoomRepository
Description Interface
Source File IImageShowRoomRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findOneByShowroomId public Optional<ImageShowroom>
countLike public Long

IProfessionalDetailRepository
Class IProfessionalDetailRepository
Description Interface
Source File IShowRoomRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findByUserDetail public Optional<ProfessionalDetail>
findProByUserId public Optional<Long>
findProDetailByEmail public Optional<ProfessionalDetail>
findProIdByEmail public Optional<Long>
findProfessionalById public Optional<ProfessionalDetail>
findProContainName public Optional<List<ProfessionalDetail>>

126
Module common user controller

AbstractGenericDAO
Class AbstractGenericDAO
Description Abstract class
Source File AbstractGenericDao.java
Package com/repository/base/impl/
Attribute Name Access Data type
modifier
entityClass protecte Class<T>
d
sessionFactory private SessionFactory
Methods Name Access Return type
modifier
getSession Public Session
getCriteria Public Criteria
count Public Optional<Long>
findById Public Optional<T>
save Public Optional<ID>
saveOrUpdate Public Void
findAll Public Optional<List<T>>
findAll Public Optional<Page<T>>
delete Public Void
deleteAll Public Void
findAll Public Optional<List<T>>
findAllByExampleLike Public Optional<List<T>>
findUnique Public Optional< <T>
existsById Public Boolean
clear Public Void
flush Public Void

127
AuthenticationRepositoryImpl
Class AuthenticationRepositoryImpl
Description Public class
Source File AuthenticationRepositoryImpl.java
Package com/repository/common/impl/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findByEmail Public Optional<Authentication>
checkExistEmail Public Optional<Long>
checkSocialEmail Public Optional< Long >
changeAccountStatus Public Optional<Boolean>
findAuthByEmail Public Optional<Authentication>

AuthenticationService
Class AuthenticationService
Description Public class
Source File AuthenticationService.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
authenticationRepository Private IAuthenticationRepository
Methods Name Access Return type
modifier
loadUserByEmail public UserDetail
getAuthorities private Set<GrantedAuthority>
getLogger protecte Logger
d
getBaseRepository protecte IGenericDAO
d
convertToDto protecte AuthenticationDto
d
convertToEntities protecte Authentication
d

BaseController
Class BaseController
Description Abstract class
Source File BaseController.java
Package src\main\java\com\controller\base\
Attribute Name Access Data type
modifier
objectMapper Private ObjectMapper
Methods Name Access Return type
modifier
getLogger protecte Logger
128
d
getService protecte IBaseService
d
existById public RespondEntity<?>
findById public RespondEntity<?>
findAll public RespondEntity<?>
count public RespondEntity<?>
save public RespondEntity<?>
update public RespondEntity<?>
findAllByExampleLike public RespondEntity<?>
findUnique public RespondEntity<?>
deleteById public RespondEntity<?>
findAllByExampleLike protecte RespondEntity<?>
d
findUnique protecte RespondEntity<?>
d
count protecte RespondEntity<?>
d
save protecte RespondEntity<?>
d
update protecte RespondEntity<?>
d
findAll protecte RespondEntity<?>
d
deleteById protecte RespondEntity<?>
d
findById protecte RespondEntity<?>
d
existsById protecte RespondEntity<?>
d
createOrder private Order
createPageRequest private PageRequest

BaseServiceImpl
Class BaseServiceImpl
Description Abstract class
Source File BaseServiceImpl.java
Package com/services/base/impl/
Attribute Name Access Data type
modifier
getLogger protecte Logger
d
getRepository protecte IGenericDAO
d
convertToDto protecte D
d
convertToEntity protecte T
d
Methods Name Access Return type
129
modifier
save public Optional<ID>
Count public Optional<Long>
saveOrUpdate public Optional
Delete public Void
existsById public Boolean
deleteAll public Void
findAll public Optional<List<D>>
findAllByExampleLike public Optional<List<D>>
findUnique public Optional<D>
findById public Optional<D>
findAll public Optional<List<D>>
findAll public Optional<Page<D>>

ChatController
Class ChatController
Description class
Source File ChatController.java
Package com/controller/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
sendMessage public ChatMessage
addUser public ChatMessage

IAdminServiceImpl
Class IAdminServiceImpl
Description Interface
Source File IAdminServiceImpl.java
Package com/services/base/core/
Attribute Name Access Data type
modifier
passwordEncoder default PasswordEncoder
defaultAvatar private String
Methods Name Access Return type
modifier
findReport public Optional<Page<ReportDto>>
findReport public Optional<Page<ReportDto>>
banUser public Optional<Boolean>
saveOrUpdateOwner public Optional<Long>
saveOrUpdatePro public Optional<Integer>
changeStatusProject public Optional< Boolean >
findProject public Optional<List<ReportDto>>
findPayments public Optional<List<PaymentDto>>
convertReportDo public ReportDto

130
IAuthenticationRepository
Class IAuthenticationRepository
Description Interface
Source File IAuthenticationRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findByEmail public Optional<Authentication>
checkExistEmail public Optional<Long>
checkSocailEmail public Optional<Long>
changeAccountStatu public Optional<Boolean>
s
findAuthByEmail public Optional< Authentication >

IBaseService
Class IBaseService
Description Interface
Source File IBaseService.java
Package com/services/base/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
count Public Optional<Long>
saveOrUpdate Public Optional<D>
save Public Optional<ILong>
delete Public Void
existsById Public Boolean
deleteAll Public Void
findAll Public <List<D>>
findAllByExampleLike Public Optional<List<D>>
findUnique Public Optional<D>
findById Public Optional<D>
findAll Public Optional<List<D>>
findAll Public Optional<Page<D>>

IGenericDAO
Class IGenericDAO
Description Interface
Source File IGenericDao.java
Package \src\main\java\com\repository\base\core\
Attribute Name Access Data type
131
modifier
N/A
Methods Name Access Return type
modifier
save public Optional<ID>
saveOrUpdate public Void
count public Optional<Long>
deleteAll public Void
findAll public Void
findAll public Optional<List<T>>
findAllByExampleLike public Optional<List<T>>
findUnique public Optional<T>
findById public Optional<T>
existsById public Boolean
clear public Void
flush public Void
getSession public Session
getCriteria public Criteria
getSessionFactory public SessionFactory

IMessageRepository
Class IMessageRepository
Description Interface
Source File IMessageRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findMessagesByRequestId public Optional<Page<Message>>

IOwnerDetailRepository
Class IOwnerDetailRepository
Description Interface
Source File IOwnerDetailRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findByUserDetail public Optional<OwnerDetail>
findOwnerDetailByEmail public Optional<OwnerDetail>
findOwnerIdByEmail public Optional<Long>
findOwnerDetailById public Optional<OwnerDetail>
checkExist public Boolean

132
IPaymentRepository
Class IPaymentRepository
Description Interface
Source File IPaymentRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
updateStatus public Optional<Boolean>
findByProjectId public Optional<List<Payment>>
deleteByProjectId public Optional< Boolean >

IProfessionalDetailRepository
Class IProfessionalDetailRepository
Description Interface
Source File IProfessionalDetailRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findByUserDetail public Optional<ProfessionalDetail>
findProByUserId public Optional<Long>
findProDetailByEmail public Optional<ProfessionalDetail>
findProIdByEmail public Optional<Long>
findProfessionalById public Optional<ProfessionalDetail>
findProContainName public Optional<List<ProfessionalDetail>>

IReportRepository
Class IReportRepository
Description Interface
Source File IReportRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findReportByStatus public Optional<Page<Report>>
IRequestRepository
Class IRequestRepository
Description Abstract class
Source File IRequestRepository.java
Package com/repository/common/core/

133
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
getRequestByProID public Optional<List<Request>>
findRequestByPID public Optional< Request>
findRequestByOID public Optional< Request>
findOwnRequest public Optional< Request>
getRequestByOwnerID public Optional<List<Request>>
findProRequest public Optional<Request>
checkExistId public Optional<Boolean>
markRead public Optional<Boolean>
markProRequest public Optional<Boolean>
checkExistId public Optional<Boolean>

IRequestService
Class IRequestService
Description Interface
Source File IRequestService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
getProRequests public Optional<List<RequestDto>>
getOwnerRequests public Optional<List<RequestDto>>
findRequestByProId public Optional<RequestDto>
findRequestByOId public Optional<RequestDto>
saveOwnerMessage public Optional<List<MessageDto>>
markReadRequest public Optional<List<MessageDto>>
markReadProRequest public Optional<Boolean>
saveRequest public Optional<Boolean>
saveOwnerMessage public Optional<RequestDto>
saveProMessage public Optional< MessageDto >
saveFile public Optional<RequestFileDto>
saveMessage public MessageDto

ITokenService
Class ITokenService
Description Interface
Source File ITokenService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
134
modifier
validateVerificationToken public String
getUser public Optional<AuthenticationDto>

IUserDetailRepository
Class IUserDetailRepository
Description Interface
Source File IUserDetailRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findAllByAuthId public Optional<UserDetail>
findUserDetailIdByEmail public Optional<Long>
getAccountStatus public Optional<Boolean>
findAuthIdByUserID public Optional< Long >
saveProfileImage public Optional< Boolean >

IUserManagedService
Class IUserManagedService
Description Interface
Source File IUserManagedService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
saveUser public Optional<AuthenticationDto>
findByEmail public Optional<AuthenticationDto>
update public Optional<UserDetailDto>
checkAccount public Optional<ProfileStatus>
storeImage public Optional<String>
registerSocial public Optional<AuthenticationDto>
checkSocail public Optional<Boolean>
checkExistSocail public Optional<Boolean>
findIdByEmail public Optional<Long>

MessageRepositoryImpl
Class MessageRepositoryImpl
Description Public class
Source File MessageRepositoryImpl.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
135
N/A
Methods Name Access Return type
modifier
findMessagesByRequestId Public Optional<Page<Message>>

RequestRepositoryImpl
Class RequestRepositoryImpl
Description Public class
Source File RequestRepositoryImpl.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
getRequestByProID public Optional<List<Request>>
findRequestByPID public Optional<Request>
findRequestByOID public Optional<Request>
findOwnRequest public Optional<Request>
getRequestByOwnerID public Optional<List<Request>>
findProRequest public Optional<Request>
checkExistId public Optional<Boolean>
markRead public Optional<Boolean>
markProRequest public Optional<Boolean>
checkExistId public Optional<Boolean>

RequestServiceImpl
Class RequestServiceImpl
Description Public class
Source File RequestServiceImpl.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
imageAddress private String
downloadUrl private String
objectMapper default ObjectMapper
Methods Name Access Return type
modifier
getLogger protecte Logger
d
getBaseRepository protecte IGenericDAO
d
convertToDto protecte RequestDto
d
convertToEntities protecte Request
d
saveRequest public Optional<RequestDto>
saveOwnerMessage public Optional<MessageDto>
136
saveProMessage public Optional<MessageDto>
saveFile public Optional<RequestFileDto>
getProRequests public Optional<List<RequestFileDto>>
findRequestByProId public Optional<RequestFileDto>
findMessages public Optional<List<MessageDto>>
getOwnerRequests public Optional<List<RequestDto>>
findRequestByOId public Optional<RequestDto>
saveMessage public MessageDto
saveOwnerMessage public Optional<MessageDto>
markReadRequest public Optional<Boolean>
markReadProRequest public Optional<Boolean>
handlerRequest public RequestDto
convertMessageDto private MessageDto

TokenServiceImpl
Class TokenServiceImpl
Description Public class
Source File TokenServiceImpl.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
getLogger Protecte Logger
d
getBaseRepository Protecte IGenericDAO
d
convertToDto Protecte VerificationTokenDto
d
convertToEntities Protecte VerificationToken
d
validateVerificationToken Public String
getUser Public Optional<AuthenticationDto>

UserController
Class UserController
Description Public class
Source File UserController.java
Package com/controller/
Attribute Name Access Data type
modifier
logger private Logger
authenticationService default AuthenticationService
userManagedService default IUserManagedService
eventPublisher private ApplicationEventPublisher
tokenService default ITokenService
Methods Name Access Return type
137
modifier
profileDetail public HttpEntity<ObjectResponseDto>
userCout public HttpEntity<ObjectResponseDto>
listAllUsers public HttpEntity<ObjectResponseDto>
getUser public RespondEntity<ObjectResponseDto>
register public RespondEntity<ObjectResponseDto>
registerByGGorFB public RespondEntity<ObjectResponseDto>
checkExistSocial public RespondEntity<ObjectResponseDto>
checkSocialUser public RespondEntity<ObjectResponseDto>
confirmRegistration public Object
updateUser public RespondEntity<ObjectResponseDto>
deleteUser public RespondEntity<ObjectResponseDto>
checkAccount public RespondEntity<ObjectResponseDto>
save public RespondEntity<?>
getAppUrl private String

UserDetailRepositoryImpl
Class UserDetailRepositoryImpl
Description Public class
Source File UserDetailRepositoryImpl.java
Package com/controller/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findAllByAuthId public Optional<UserDetail>
findUserDetailIdByEmail public Optional<Long>
getAccountStatus public Optional<Boolean>
findAuthIdByUserID public Optional<Long>
saveProfileImage public Optional<Boolean>

UserManagedServiceImpl
Class UserManagedServiceImpl
Description Public class
Source File UserManagedServiceImpl.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
userDetailRepository default IUserDetailRepository
authenticationRepository default IAuthenticationRepository
passwordEncoder default PasswordEncoder
roleRepository default IRoleRepository
imageAddress private String
defaultAvatar private String
DEFAULT_PASSWORD private String
storageService default IStorageService

138
ownerDetailRepository default IOwnerDetailRepository
professionalDetailRepository default IProfessionalDetailRepository
Methods Name Access Return type
modifier
getLogger protecte Logger
d
getBaseRepository protecte IGenericDAO
d
convertToDto public UserDetailDto
convertToEntities public UserDetail
saveUser public Optional<AuthenticationDto>
findByEmail public Optional<AuthenticationDto>
update public Optional< UserDetailDto >
checkAccount public Optional<ProfileStatus>
storeImage public Optional<String>
registerSocial public Optional<AuthenticationDto>
checkSocail public Optional<Boolean>
checkExistSocail public Optional<Boolean>
findIdByEmail public Optional<Long>
getAuthenticationDto private AuthenticationDto
handlerUserDetail private UserDetail

Module designer controller

AbstractGenericDao
Class AbstractGenericDAO
Description Abstract class
Source File AbstractGenericDao.java
Package com/repository/base/impl/
Attribute Name Access Data type
modifier
139
entityClass protecte Class<T>
d
sessionFactory private SessionFactory
Methods Name Access Return type
modifier
getSession public Session
getCriteria public Criteria
count public Optional<Long>
findById public Optional<T>
Save public Optional<ID>
saveOrUpdate public Void
findAll public Optional<List<T>>
findAll public Optional<Page<T>>
delte public Void
deleteAll public Void
findAll public Optional<List<T>>
findAllByExampleLike public Optional<List<T>>
findUnique public Optional< <T>
existsById public Boolean
clear public Void
flush public Void

BaseController
Class BaseController
Description Abstract class
Source File BaseController.java
Package src\main\java\com\controller\base\
Attribute Name Access modifier Data type description
objectMapper private ObjectMapper
Methods Name Access modifier Return type Description
getLogger protected Logger
getService protected IBaseService
existById public RespondEntity<?>
findById public RespondEntity<?>
findAll public RespondEntity<?>
count public RespondEntity<?>
Save public RespondEntity<?>
update public RespondEntity<?>
findAllByExampleLike public RespondEntity<?>
findUnique public RespondEntity<?>
deleteById public RespondEntity<?>
findAllByExampleLike protected RespondEntity<?>
findUnique protected RespondEntity<?>
count protected RespondEntity<?>
save protected RespondEntity<?>
update protected RespondEntity<?>
findAll protected RespondEntity<?>
deleteById protected RespondEntity<?>

140
findById protected RespondEntity<?>
existsById protected RespondEntity<?>
createOrder private Order
createPageRequest private PageRequest

BaseServiceImpl
Class BaseServiceImpl
Description Abstract class
Source File BaseServiceImpl.java
Package com/services/base/impl/
Attribute Name Access Data type
modifier
getLogger protecte Logger
d
getRepository protecte IGenericDAO
d
convertToDto protecte D
d
convertToEntity protecte T
d
Methods Name Access Return type
modifier
save public Optional<ID>
count public Optional<Long>
saveOrUpdate public Optional
delete public Void
existsById public Boolean
deleteAll public Void
findAll public Optional<List<D>>
findAllByExampleLike public Optional<List<D>>
findUnique public Optional<D>
findById public Optional<D>
findAll public Optional<List<D>>
findAll public Optional<Page<D>>

IBaseService
Class IBaseService
Description Interface
Source File IBaseService.java
Package com/services/base/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
count public Optional<Long>
saveOrUpdate public Optional<D>
Save public Optional<ILong>
141
delete public Void
existsById public Boolean
deleteAll public Void
findAll public <List<D>>
findAllByExampleLike public Optional<List<D>>
findUnique public Optional<D>
findById public Optional<D>
findAll public Optional<List<D>>
findAll public Optional<Page<D>>

IGenericDao
Class IGenericDAO
Description Interface
Source File IGenericDao.java
Package \src\main\java\com\repository\base\core\
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
save public Optional<ID>
saveOrUpdate public Void
count public Optional<Long>
deleteAll public Void
findAll public Void
findAll public Optional<List<T>>
findAllByExampleLike public Optional<List<T>>
findUnique public Optional<T>
findById public Optional<T>
existsById public Boolean
Clear public Void
flush public Void
getSession public Session
getCriteria public Criteria
getSessionFactory public SessionFactory

IOwnerDetailRepository
Class IOwnerDetailRepository
Description Interface
Source File IOwnerDetailRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findByUserDetail public Optional<OwnerDetail>

142
findOwnerDetailByEmail public Optional<OwnerDetail>
findOwnerIdByEmail public Optional<Long>
findOwnerDetailById public Optional<OwnerDetail>
checkExist public Boolean

IProfessionalDetailRepository
Class IProfessionalDetailRepository
Description Interface
Source File IProfessionalDetailRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findByUserDetail public Optional<ProfessionalDetail>
findProByUserId public Optional<Long>
findProDetailByEmail public Optional<ProfessionalDetail>
findProIdByEmail public Optional<Long>
findProfessionalById public Optional<ProfessionalDetail>
findProContainName public Optional<List<ProfessionalDetail>>

IProfessionalDetailService
Class IProfessionalDetailService
Description Interface
Source File IProfessionalDetailService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
update public Optional<ProfessionalDetailDto>
findCurrentPro public Optional< ProfessionalDetailDto >
getProjectInvite public Optional<ProjectDto>
IProjectRepository
Class IProjectRepository
Description Interface
Source File IProjectRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findOwnProject public Optional<Page<Project>>
findProProject public Optional<Page<Project>>

143
findOwnerProjectByd public Optional<Project>
findProProjectByProId public Optional<Project>
findProjectIdByOwnerId public Optional<Long>
findProjectIdByProId public Optional<Long>
updatePro public Optional<Boolean>
changeProjectStatus public Optional<Boolean>
checkExist public Boolean
updateProjectByPro public Long
updateProjectByHO public Long
checkExistProject public Boolean
checkProject public Optional<Boolean>
findReview public Optional<List<Project>>
changeProjectStatus public Optional<Boolean>
checkProiectClose public Optional<Boolean>

IRequestRepository
Class IRequestRepository
Description Interface
Source File IRequestRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
getRequestByProID public Optional<List<Request>>
findRequestByPID public Optional< Request>
findRequestByOID public Optional< Request>
findOwnRequest public Optional< Request>
getRequestByOwnerID public Optional<List<Request>>
findProRequest public Optional<Request>
checkExistId public Optional<Boolean>
markRead public Optional<Boolean>
markProRequest public Optional<Boolean>
checkExistId public Optional<Boolean>

IRequestService
Class IRequestService
Description Interface
Source File IRequestService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
getProRequests public Optional<List<RequestDto>>

144
getOwnerRequests public Optional<List<RequestDto>>
findRequestByProId public Optional<RequestDto>
findRequestByOId public Optional<RequestDto>
saveOwnerMessage public Optional<List<MessageDto>>
markReadRequest public Optional<List<MessageDto>>
markReadProRequest public Optional<Boolean>
saveRequest public Optional<Boolean>
saveOwnerMessage public Optional<RequestDto>
saveProMessage public Optional< MessageDto >
saveFile public Optional<RequestFileDto>
saveMessage public MessageDto

IShowRoomRepository
Class IShowRoomRepository
Description Interface
Source File IShowRoomRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findShowRoom public Optional<Page<Showroom>>
findShowRoomByProfessional public Optional<Page<Showroom>>
findShowRoomByProfessional public Optional<List<Showroom>>
findContainName public Optional< List <Showroom>>
findShowroomByCategoryId public Optional< List <Showroom>>
findShowRoomById public Optional <Showroom>

ITagService
Class ITagService
Description Interface
Source File ITagService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findContainName public Optional<List<TagDto>>

IUserDetailRepository
Class IUserDetailRepository
Description Interface
Source File IUserDetailRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
145
modifier
N/A
Methods Name Access Return type
modifier
findAllByAuthId public Optional<UserDetail>
findUserDetailIdByEmail public Optional<Long>
getAccountStatus public Optional<Boolean>
findAuthIdByUserID public Optional< Long >
saveProfileImage public Optional< Boolean >

IMessageRepository
Class IMessageRepository
Description Interface
Source File IMessageRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findMessagesByRequestId public Optional<Page<Message>>

ProfessionalController
Class ProfessionalController
Description Public class
Source File ProfessionalController.java
Package com/controller/
Attribute Name Access Data type
modifier
professionalDetailService default IProfessionalDetailService
requestService default IRequestService
Methods Name Access Return type
modifier
getLogger protecte Logger
d
getService protecte IBaseService
d
createProfessional public RespondEntity<ObjectRespondDto>
current public RespondEntity<ObjectRespondDto>
saveMessage public RespondEntity<ObjectRespondDto>
getRequests public RespondEntity<ObjectRespondDto>
markReadRequest public RespondEntity<ObjectRespondDto>
findById public RespondEntity<ObjectRespondDto>
getMessages public RespondEntity<ObjectRespondDto>

ProfessionalDetailServiceImpl
Class ProfessionalDetailServiceImpl
146
Description Public Class
Source File ProfessionalDetailServiceImpl.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
professionalDetailRepository default IProfessionalDetailRepository
userDetailRepository default IUserDetailRepository
showRoomRepository default IShowRoomRepository
projectRepository default IProjectRepository
imageAddress private String
downloadUrl private String
Methods Name Access Return type
modifier
getLogger protecte Logger
d
getBaseRepository protecte IGenericDAO
d
findById public Optional<ProfessionalDto>
convertToDto protecte ProfessionalDetailDto
d
convertToEntities protecte ProfessionalDetail
d
update public Optional<ProfessionalDto>
getProjectInvite public Optional<ProjectDto>
convertProjectFile private ProjectFileDto
getLink private String
findCurrentPro public Optional<ProfessionalDto>

RequestServiceImpl
Class RequestServiceImpl
Description Class
Source File RequestServiceImpl.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
imageAddress private String
downloadUrl private String
objectMapper default ObjectMapper
Methods Name Access Return type
modifier
getLogger protecte Logger
d
getBaseRepository protecte IGenericDAO
d
convertToDto protecte RequestDto
d
convertToEntities protecte Request
d
saveRequest public Optional<RequestDto>
147
saveOwnerMessage public Optional<MessageDto>
saveProMessage public Optional<MessageDto>
saveFile public Optional<RequestFileDto>
getProRequests public Optional<List<RequestFileDto>>
findRequestByProId public Optional<RequestFileDto>
findMessages public Optional<List<MessageDto>>
getOwnerRequests public Optional<List<RequestDto>>
findRequestByOId public Optional<RequestDto>
saveMessage public MessageDto
saveOwnerMessage public Optional<MessageDto>
markReadRequest public Optional<Boolean>
markReadProRequest public Optional<Boolean>
handlerRequest public RequestDto
convertMessageDto private MessageDto

TagController
Class TagController
Description Public class
Source File TagController.java
Package com/controller/
Attribute Name Access Data type
modifier
tagService
Methods Name Access Return type
modifier
getLogger protecte Logger
d
getService protecte IBaseService
d
findAllTagByNameLike privae RespondEntity<?>
TokenServiceImpl
Class TokenServiceImpl
Description Public class
Source File TokenServiceImpl.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
getLogger protecte Logger
d
getBaseRepository protecte IGenericDAO
d
convertToDto protecte VerificationTokenDto
d
convertToEntities protecte VerificationToken
d

148
validateVerificationToken public String
getUser public Optional<AuthenticationDto>

Module showroom controller

BaseController
Class BaseController
Description Abstract class
Source File BaseController.java
Package src\main\java\com\controller\base\
Attribute Name Access modifier Data type description
objectMapper private ObjectMapper
Methods Name Access modifier Return type Description
getLogger protected Logger
getService protected IBaseService
existById public RespondEntity<?>
findById public RespondEntity<?>
findAll public RespondEntity<?>
count public RespondEntity<?>
save public RespondEntity<?>
update public RespondEntity<?>
findAllByExampleLike public RespondEntity<?>
findUnique public RespondEntity<?>
deleteById public RespondEntity<?>
findAllByExampleLike protected RespondEntity<?>
findUnique protected RespondEntity<?>
count protected RespondEntity<?>
save protected RespondEntity<?>
update protected RespondEntity<?>
findAll protected RespondEntity<?>
deleteById protected RespondEntity<?>
findById protected RespondEntity<?>

149
existsById protected RespondEntity<?>
createOrder private Order
createPageRequest private PageRequest

BaseServiceImpl
Class BaseServiceImpl
Description Abstract class
Source File BaseServiceImpl.java
Package com/services/base/impl/
Attribute Name Access Data type
modifier
getLogger protecte Logger
d
getRepository protecte IGenericDAO
d
convertToDto protecte D
d
convertToEntity protecte T
d
Methods Name Access Return type
modifier
save public Optional<ID>
count public Optional<Long>
saveOrUpdate public Optional
delete public Void
existsById public Boolean
deleteAll public Void
findAll public Optional<List<D>>
findAllByExampleLike public Optional<List<D>>
findUnique public Optional<D>
findById public Optional<D>
findAll public Optional<List<D>>
findAll public Optional<Page<D>>

IBaseService
Class IBaseService
Descriptio Interface
Source File IBaseService.java
Package com/services/base/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
Count Public Optional<Long>
saveOrUpdate Public Optional<D>
Save Public Optional<ILong>
Delete Public Void
150
existsById Public Boolean
deleteAll Public Void
findAll Public <List<D>>
findAllByExampleLike Public Optional<List<D>>
findUnique Public Optional<D>
findById Public Optional<D>
findAll Public Optional<List<D>>
findAll Public Optional<Page<D>>

IImageShowRoomRepository
Class IImageShowRoomRepository
Description Interface
Source File IImageShowRoomRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findOneByShowroomId Public Optional<ImageShowroom>
countLike Public Long

IProfessionalDetailRepository
Class IProfessionalDetailRepository
Description Interface
Source File IShowRoomRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findByUserDetail Public Optional<ProfessionalDetail>
findProByUserId Public Optional<Long>
findProDetailByEmail Public Optional<ProfessionalDetail>
findProIdByEmail Public Optional<Long>
findProfessionalById Public Optional<ProfessionalDetail>
findProContainName Public Optional<List<ProfessionalDetail>>

IShowRoomRepository
Class IShowRoomRepository
Description Interface
Source File IShowRoomRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
151
Methods Name Access Return type
modifier
findShowRoom Public Optional<Page<Showroom>>
findShowRoomByProfessional Public Optional<Page<Showroom>>
findShowRoomByProfessional Public Optional<List<Showroom>>
findContainName Public Optional< List <Showroom>>
findShowroomByCategoryId Public Optional< List <Showroom>>
findShowRoomById Public Optional <Showroom>

IShowRoomService
Class IShowroomService
Description Interface
Source File IShowRoomService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findShowroom Public Optional<Page<ShowRoomDto>>
saveShowroom Public Optional< ShowRoomDto>
findShowroomByPro Public Optional<Page<ShowRoomDto>>
findShowroomById Public Optional<ShowRoomDto>
findContainName Public Optional<List<ShowRoomDto>>
findDetailContainName Public Optional<List<ShowRoomDto>>
findShowRoomByCateId Public Optional<List<ShowRoomDto>>

IShowRoomLikeRepository
Class IShowRoomLikeRepository
Description Interface
Source File IShowRoomLikeRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findLikes Public Optional<Long>

ImageShowRoomRepositoryImpl
Class ImageShowRoomRepositoryImpl
Description Public class
Source File ImageShowRoomRepositoryImpl.java
Package com/repository/common/impl/
Attribute Name Access Data type
modifier
N/A
152
Methods Name Access Return type
modifier
findOneBySRId Public Optional<ImageShowroom>
countLike Public Long

IUserManagedService
Class IUserManagedService
Description Interface
Source File IUserManagedService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
saveUser Public Optional<AuthenticationDto>
findByEmail Public Optional<AuthenticationDto>
update Public Optional<UserDetailDto>
checkAccount Public Optional<ProfileStatus>
storeImage Public Optional<String>
registerSocial Public Optional<AuthenticationDto>
checkSocail Public Optional<Boolean>
checkExistSocail Public Optional<Boolean>
findIdByEmail Public Optional<Long>

ProfessionalDetailRepositoryImpl
Class ProfessionalDetailRepositoryImpl
Description Public class
Source File ProfessionalDetailRepositoryImpl.java
Package com/repository/common/impl/
Attribute Name Access Data type
modifier
userDetailRepository Default IUserDetailRepository
Methods Name Access Return type
modifier
findByUserDetail Public Optional<ProfessionalDetail>
findProIdByUserID Public Optional<Long>
findProDetailByEmail Public Optional<ProfessionalDetail>
findProIdlByEmail Public Optional< Long >
findProfessionalById Public Optional<ProfessionalDetail>
findProContainName Public Optional<List<ProfessionalDetail>>

153
ShowRoomServiceImpl
Class ShowRoomServiceImpl
Description Public class
Source File ShowRoomServiceImpl.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
showRoomRepository Default IShowRoomRepository
imageShowRoomRepository Default IImageShowRoomRepository
professionalDetailRepository Default IProfessionalDetailRepository
companyService Default ICompanyService
showRoomLikeRepository Default IShowRoomLikeRepository
showRoomRateRepository Default IShowRoomRateRepository
companyRepository Default ICompanyRepository
showRoomCategoryRepository Default IShowRoomCategoryRepository
objectMapper Default ObjectMapper
Methods Name Access Return type
modifier
getLogger Protecte Logger
d
getBaseRepository Protecte IGenericDAO
d
convertToDto Protecte ShowRoomDto
d
findById Public Optional< ShowRoomDto>
convertToEntities Protecte ShowRoom
d
imageShowRoomEntity Private ImageShowRoom
convertTagEntity Private Tag
convertTagDto Private TagDto
convertToImageShowroom Private ImageShowRoomDto
findShowRoom Public Optional<Page<ShowRoomDto>>
saveShowRoom Public Optional< ShowRoomDto>
findShowRoomByPro Public Optional<Page<ShowRoomDto>>
findShhowRoomById Public Optional<ShowRoomDto>
findContainName Public Optional<List<ShowRoomDto>>
findDetailContainName Public Optional<List<ShowRoomDto>>
findShowRoomByCategory Public Optional<List<ShowRoomDto>>
handlerOneShowRoom Public ShowRoomDto
getPageDto Private Page<ShowRoomDto>

ShowroomCategoryController
Class ShowroomCategoryController
Description Public class
Source File ShowroomCategoryController.java
Package com/controller/
Attribute Name Access Data type
modifier

154
showroomCategoryService Default IShowroomCategoryService
Methods Name Access Return type
modifier
getLogger Protecte Logger
d
getService Protecte IBaseService
d

ShowRoomController
Class ShowRoomController
Description Public class
Source File ShowRoomController.java
Package com/controller/
Attribute Name Access Data type
modifier
showRoomRateService Default IShowroomCategoryService
Methods Name Access Return type
modifier
getLogger Protecte Logger
d
getService Protecte IBaseService
d
findShowRom Default RespondEntity<?>
findShowRomByProfessional Default RespondEntity<?>
findProShowRomById Default RespondEntity<?>
save Public RespondEntity<?>

ShowRoomLikeRepositoryImpl
Class ShowRoomLikeRepositoryImpl
Description Public class
Source File ShowRoomLikeRepositoryImpl.java
Package com/respository/common/impl
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findLikes Public Optional< Long>

ShowRoomRepositoryImpl
Class ShowRoomRepositoryImpl
Description Public class
Source File ShowRoomRepositoryImpl.java
Package com/respository/common/impl
Attribute Name Access Data type
modifier
objectMapper Default ObjectMapper
155
Methods Name Access Return type
modifier
findShowRoom Public Optional<Page<Showroom>>
findShowRoomByProfessional Public Optional<Page<Showroom>>
findShowRoomByProfessional Public Optional<List<Showroom>>
findContainName Public Optional< List <Showroom>>
findShowByCateId Public Optional< List <Showroom>>
findSRById Public Optional <Showroom>
getList Private List <Showroom>

Module house owner controller

AbstractGenericDao
Class AbstractGenericDAO
Description Abstract class
Source File AbstractGenericDao.java
Package com/repository/base/impl/
Attribute Name Access Data type
modifier
entityClass Protecte Class<T>
d
sessionFactory Private SessionFactory
Methods Name Access Return type
modifier
getSession Public Session
getCriteria Public Criteria
count Public Optional<Long>
findById Public Optional<T>
save Public Optional<ID>
saveOrUpdate Public Void

156
findAll Public Optional<List<T>>
findAll Public Optional<Page<T>>
delte Public Void
deleteAll Public Void
findAll Public Optional<List<T>>
findAllByExampleLike Public Optional<List<T>>
findUnique Public Optional< <T>
existsById Public Boolean
clear Public Void
flush Public Void

BaseController
Class BaseController
Description Abstract class
Source File BaseController.java
Package src\main\java\com\controller\base\
Attribute Name Access modifier Data type description
objectMapper Private ObjectMapper
Methods Name Access modifier Return type Description
getLogger Protected Logger
getService Protected IBaseService
existById Public RespondEntity<?>
findById Public RespondEntity<?>
findAll Public RespondEntity<?>
count Public RespondEntity<?>
save Public RespondEntity<?>
update Public RespondEntity<?>
findAllByExampleLike Public RespondEntity<?>
findUnique Public RespondEntity<?>
deleteById Public RespondEntity<?>
findAllByExampleLike Protected RespondEntity<?>
findUnique Protected RespondEntity<?>
count Protected RespondEntity<?>
save Protected RespondEntity<?>
update Protected RespondEntity<?>
findAll Protected RespondEntity<?>
deleteById Protected RespondEntity<?>
findById Protected RespondEntity<?>
existsById Protected RespondEntity<?>
createOrder Private Order
createPageRequest Private PageRequest

BaseServiceImpl
Class BaseServiceImpl
Description Abstract class
Source File BaseServiceImpl.java
Package com/services/base/impl/

157
Attribute Name Access Data type
modifier
getLogger Protecte Logger
d
getRepository Protecte IGenericDAO
d
convertToDto Protecte D
d
convertToEntity Protecte T
d
Methods Name Access Return type
modifier
save Public Optional<ID>
count Public Optional<Long>
saveOrUpdate Public Optional
delete Public Void
existsById Public Boolean
deleteAll Public Void
findAll Public Optional<List<D>>
findAllByExampleLike Public Optional<List<D>>
findUnique Public Optional<D>
findById Public Optional<D>
findAll Public Optional<List<D>>
findAll Public Optional<Page<D>>

IBaseService
Class IBaseService
Description Interface
Source File IBaseService.java
Package com/services/base/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
count Public Optional<Long>
saveOrUpdate Public Optional<D>
Save Public Optional<ILong>
delete Public Void
existsById Public Boolean
deleteAll Public Void
findAll Public <List<D>>
findAllByExampleLike Public Optional<List<D>>
findUnique Public Optional<D>
findById Public Optional<D>
findAll Public Optional<List<D>>
findAll Public Optional<Page<D>>

158
IGenericDao
Class IGenericDAO
Description Interface
Source File IGenericDao.java
Package \src\main\java\com\repository\base\core\
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
save Public Optional<ID>
saveOrUpdate Public Void
count Public Optional<Long>
deleteAll Public Void
findAll Public Void
findAll Public Optional<List<T>>
findAllByExampleLike Public Optional<List<T>>
findUnique Public Optional<T>
findById Public Optional<T>
existsById Public Boolean
clear Public Void
flush Public Void
getSession Public Session
getCriteria Public Criteria
getSessionFactory Public SessionFactory

IOwnerDetailRepository
Class IOwnerDetailRepository
Description Interface
Source File IOwnerDetailRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findByUserDetail Public Optional<OwnerDetail>
findOwnerDetailByEmail Public Optional<OwnerDetail>
findOwnerIdByEmail Public Optional<Long>
findOwnerDetailById Public Optional<OwnerDetail>
checkExist Public Boolean

IOwnerDetailService
Class saveOwner
Description Interface
Source File saveOwner.java
Package com/services/common/core/

159
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
saveOwner Public Optional<OwnerDetailDto>
findCurrentOwner Public Optional<OwnerDetailDto>

IProfessionalDetailRepository
Class IProfessionalDetailRepository
Description Interface
Source File IProfessionalDetailRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findByUserDetail Public Optional<ProfessionalDetail>
findProByUserId Public Optional<Long>
findProDetailByEmail Public Optional<ProfessionalDetail>
findProIdByEmail Public Optional<Long>
findProfessionalById Public Optional<ProfessionalDetail>
findProContainName Public Optional<List<ProfessionalDetail>>

IProfessionalDetailService
Class IProfessionalDetailService
Description Interface
Source File IProfessionalDetailService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
update Public Optional<ProfessionalDetailDto>
findCurrentPro Public Optional< ProfessionalDetailDto >
getProjectInvite Public Optional<ProjectDto>

IRequestRepository
Class IRequestRepository
Description Interface
Source File IRequestRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
160
Methods Name Access Return type
modifier
getRequestByProID Public Optional<List<Request>>
findRequestByPID Public Optional< Request>
findRequestByOID Public Optional< Request>
findOwnRequest Public Optional< Request>
getRequestByOwnerID Public Optional<List<Request>>
findProRequest Public Optional<Request>
checkExistId Public Optional<Boolean>
markRead Public Optional<Boolean>
markProRequest Public Optional<Boolean>
checkExistId Public Optional<Boolean>

IRequestService
Class IRequestService
Description Interface
Source File IRequestService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
getProRequests Public Optional<List<RequestDto>>
getOwnerRequests Public Optional<List<RequestDto>>
findRequestByProId Public Optional<RequestDto>
findRequestByOId Public Optional<RequestDto>
saveOwnerMessage Public Optional<List<MessageDto>>
markReadRequest Public Optional<List<MessageDto>>
markReadProRequest Public Optional<Boolean>
saveRequest Public Optional<Boolean>
saveOwnerMessage Public Optional<RequestDto>
saveProMessage Public Optional< MessageDto >
saveFile Public Optional<RequestFileDto>
saveMessage Public MessageDto

IUserDetailRepository
Class IUserDetailRepository
Description Interface
Source File IUserDetailRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findAllByAuthId Public Optional<UserDetail>
findUserDetailIdByEmail Public Optional<Long>
161
getAccountStatus Public Optional<Boolean>
findAuthIdByUserID Public Optional< Long >
saveProfileImage Public Optional< Boolean >

OwnerController
Class OwnerController
Description Public class
Source File OwnerController.java
Package com/controller/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
getLogger Protecte Logger
d
getService Protecte IBaseService
d
createOwner Public RespondEntity<ObjectRespondDto>
findByID Public RespondEntity<ObjectRespondDto>
current Public RespondEntity<ObjectRespondDto>
createProfessional Public RespondEntity<ObjectRespondDto>
demo Public RespondEntity<ObjectRespondDto>
save Public RespondEntity<?>
uploadFile Public RespondEntity<ObjectRespondDto>
getRequests Public RespondEntity<ObjectRespondDto>
markReadRequest Public RespondEntity<ObjectRespondDto>
getMessages Public RespondEntity<ObjectRespondDto>
findById Public RespondEntity<ObjectRespondDto>

OwnerDetailServiceImpl
Class OwnerDetailServiceImpl
Description Public class
Source File OwnerDetailServiceImpl.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
imageAddress Private String
Methods Name Access Return type
modifier
getLogger Protecte Logger
d
getBaseRepository Protecte IGenericDao
d
convertToDto Public OwnerDetail
convertToEntities Public OwnerDetailDto
saveOwner Public Optional<OwnerDetailDto>
findCurrentOwner Public Optional<OwnerDetailDto>
162
ProfessionalDetailRepositoryImpl
Class ProfessionalDetailRepositoryImpl
Description Public class
Source File ProfessionalDetailRepositoryImpl.java
Package com/repository/common/impl/
Attribute Name Access Data type
modifier
userDetailRepository Default IUserDetailRepository
Methods Name Access Return type
modifier
findByUserDetail Public Optional<ProfessionalDetail>
findProIdByUserID Public Optional<Long>
findProDetailByEmail Public Optional<ProfessionalDetail>
findProIdlByEmail Public Optional< Long >
findProfessionalById Public Optional<ProfessionalDetail>
findProContainName Public Optional<List<ProfessionalDetail>>

ProfessionalDetailServiceImpl
Class ProfessionalDetailServiceImpl
Description Public class
Source File ProfessionalDetailServiceImpl.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
imageAddress Private String
downloadUrl Private String
Methods Name Access Return type
modifier
getLogger Protecte Logger
d
getBaseRepository Protecte IGenericDAO
d
findById Public Optional<ProfessionalDetailDto>
convertToDto Protecte ProfessionalDetailDto
d
convertToEntities Protecte ProfessionalDetail
d
update Public Optional<ProfessionalDetailDto>
getProjectInvite Public Optional<ProjectDto>
convertProjectFile Private ProjectFileDto
getLink Private String
findCurrentPro Public Optional<ProfessionalDetailDto>

RequestRepositoryImpl
Class RequestRepositoryImpl
Description Public class
163
Source File RequestRepositoryImpl.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
getRequestByProID Public Optional<List<Request>>
findRequestByPID Public Optional<Request>
findRequestByOID Public Optional<Request>
findOwnRequest Public Optional<Request>
getRequestByOwnerID Public Optional<List<Request>>
findProRequest Public Optional<Request>
checkExistId Public Optional<Boolean>
markRead Public Optional<Boolean>
markProRequest Public Optional<Boolean>
checkExistId Public Optional<Boolean>

RequestServiceImpl
Class RequestServiceImpl
Description Public class
Source File RequestServiceImpl.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
imageAddress Private String
downloadUrl Private String
objectMapper Default ObjectMapper
Methods Name Access Return type
modifier
getLogger Protecte Logger
d
getBaseRepository Protecte IGenericDAO
d
convertToDto Protecte RequestDto
d
convertToEntities Protecte Request
d
saveRequest Public Optional<RequestDto>
saveOwnerMessage Public Optional<MessageDto>
saveProMessage Public Optional<MessageDto>
saveFile Public Optional<RequestFileDto>
getProRequests Public Optional<List<RequestFileDto>>
findRequestByProId Public Optional<RequestFileDto>
findMessages Public Optional<List<MessageDto>>
getOwnerRequests Public Optional<List<RequestDto>>
findRequestByOId Public Optional<RequestDto>
saveMessage Public MessageDto
saveOwnerMessage Public Optional<MessageDto>
164
markReadRequest Public Optional<Boolean>
markReadProRequest Public Optional<Boolean>
handlerRequest Public RequestDto
convertMessageDto Private MessageDto

Module project controller

FileController
Class FileController
Description Public class
Source File FileController.java
Package com/controller/
Attribute Name Access Data type
modifier
storageService Private IStorageService
imageAddress Private String
downloadUrl Default String
Methods Name Access Return type
modifier
handleFileUpload Public RespondEntity<ObjectRespondDto>
downloadFile Public RespondEntity<ObjectRespondDto>
save Public RespondEntity<?>
get Public RespondEntity<?>

IPaymentService
Class IPaymentService
Description Interface
Source File IPaymentService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier

165
savePayment Public Optional<PaymentDto>
updatePayment Public Optional<PaymentDto>
findPayment Public Optional<List<PaymentDto>>
changeStatus Public Optional<Boolean>

IStorageService
Class IStorageService
Description Interface
Source File IStorageService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
storeFile Public Optional<String>
storeImage Public Optional<String>
loadFile Public Optional<Resources>
loadImage Public Optional<Resources>
deleteAll Public Void
deleteByName Public Void
init Public Void

IVersionService
Class IVersionService
Description Interface
Source File IVersionService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
saveOwnerVersion Public Optional<VersionDto>
saveProVersion Public Optional<VersionDto>
saveProVersion Public Optional<List>

OwnerDetailRepositoryImpl
Class OwnerDetailRepositoryImpl
Description Public class
Source File OwnerDetailRepositoryImpl.java
Package com/repository/common/impl/
Attribute Name Access Data type
modifier
userDetailRepository Default IUserDetailRepository
Methods Name Access Return type
modifier
166
findByUserDetail Public Optional<OwnerDetail>
findOwnerDetailByEmail Public Optional<OwnerDetail>
findOwnerIdByEmail Public Optional<Long>
findOwnerDetailById Public Optional<OwnerDetail>
checkExist Public Boolean

PaymentController
Class PaymentController
Description Public class
Source File PaymentController.java
Package com/controller/
Attribute Name Access Data type
modifier
paymentService Default IPaymentService
Methods Name Access Return type
modifier
savePayment Public RespondEntity<ObjectRespondDto>
updatePayment Public RespondEntity<ObjectRespondDto>
deletePayment Public RespondEntity<ObjectRespondDto>

PaymentRepositoryImpl
Class PaymentRepositoryImpl
Description Public class
Source File PaymentRepositoryImpl.java
Package com/repository/common/impl
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
updateStatus Public Optional<Boolean>
findByProjectId Public Optional<List<Payment> >
deleteByProjectId Public Optional<Boolean>

PaymentServiceImpl

Class PaymentServiceImpl
Description Public class
Source File PaymentServiceImpl.java
Package com/services/common/impl
Attribute Name Access Data type
modifier
paymentRepository Default IPaymentRepository
professionalDetailRepository Default IProfessionalDetailRepository
projectRepository Default IProjectRepository
ownerDetailRepository Default IOwnerDetailRepository

167
Methods Name Access Return type
modifier
getLogger Protecte Logger
d
getBaseRepository Protecte IGenericDAO
d
convertToDto Protecte PaymentDto
d
convertToEntities Protecte Payment
d
convertPayment Private Payment
savePayment Public Optional<PaymentDto>
updatePayment Public Optional<PaymentDto>
findPayment Public Optional<List<PaymentDto>>
changeStatus Public Optional<Boolean>

ProjectController
Class ProjectController
Description Public class
Source File ProjectController.java
Package com/controller/
Attribute Name Access Data type
modifier
projectService Private IProjectService
Methods Name Access Return type
modifier
getLogger Private Logger
save Public RespondEntity<?>
findProByName Default RespondEntity<?>
updateProjectByPro Default RespondEntity<?>
updateProjectByOwner Default RespondEntity<?>
addProjectByPro Default RespondEntity<?>
findProProjectById Default RespondEntity<?>
findProProject Default RespondEntity<?>
updateProject Default RespondEntity<?>
acceptProject Default RespondEntity<?>
findAllProject Default RespondEntity<?>
findOwnProjectById Default RespondEntity<?>
ownerAddProjectFile Default RespondEntity<?>
ownerUpdateProjectfile Default RespondEntity<?>
ownerDeleteFile Default RespondEntity<?>
acceptPayment Default RespondEntity<?>
closeProject Default RespondEntity<?>
rejectProject Default RespondEntity<?>
checkProject Default RespondEntity<?>

ProjectRepositoryImpl
Class ProjectRepositoryImpl
168
Description Public class
Source File ProjectRepositoryImpl.java
Package com/repository/common/impl/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findOwnProject Public Logger
findProProject Public IGenericDAO
findOwnerProjectByd Public VerificationTokenDto
findProProjectByProId Public VerificationToken
findProjectIdByOwnerId Public String
findProjectIdByProId Public Optional<AuthenticationDto>
updatePro Public Optional<Boolean>
changeProjectStatus Public Optional<Boolean>
checkExist Public Boolean
updateProjectByPro Public Long
updateProjectByHO Public Long
checkExistProject Public Boolean
checkProject Public Optional<Boolean>
findReview Public Optional<List<Project>>
changeProjectStatus Public Optional<Boolean>
checkProiectClose Public Optional<Boolean>

StorageServiceImpl
Class StorageServiceImpl
Description Public class
Source File StorageServiceImpl.java
Package com/services/common/impl/
Attribute Name Access Data type
modifier
N/A ROOT_FOLDER_NAME Private Static string
ROOT_DELETE_FILE_PATH Private Static string
rootFileLocation Private Path
rootImagesLocation Private Path
Methods Name Access Return type
modifier
storeFile Public Optional<String>
storeImage Public Optional<String>
loadFile Public Optional<Resource>
loadImage Public Optional< Resource >
deleteAll Public Void
deleteByName Public Void
init Public Void
load Public Optional

169
VersionController
Class VersionController
Description Public class
Source File VersionController.java
Package com/controller/
Attribute Name Access Data type
modifier
versionService Default IVersionService
Methods Name Access Return type
modifier
getLogger Protecte Logger
d
getService Protecte IBaseService
d
saveOwnerVersion Public RespondEntity<ObjectRespondDto>
saveProVersion Public RespondEntity<ObjectRespondDto>
save Public RespondEntity<?>

VersionServiceImpl
Class VersionServiceImpl
Description Public class
Source File VersionServiceImpl.java
Package com/controller/
Attribute Name Access Data type
modifier
versionRepository Default IVersionService
downloadUrl Private String
fileStore Default IStorageService
projectRepository Default IProjectRepository
fileRepository Default IFileRepository
ownerDetailRepository Default IOwnerDetailRepository
professionalDetailRepository Default IProfessionalDetailRepository
objectMapper Default IObjectMapper
Methods Name Access Return type
modifier
getLogger Protecte Logger
d
getBaseRepository Protecte IGenericDAO
d
convertToDto Protecte VersionDto
d
convertToEntities Protecte Version
d
saveOwnerVersion Public Optional<VersionDto>
saveProVersion Public Optional<VersionDto>
saveProVersion Public Optional<List>
handlerVersion Private Optional<VersionDto>

170
Module Admin controller

AbstractGenericDao
Class AbstractGenericDAO
Description Abstract class
Source File AbstractGenericDao.java
Package com/repository/base/impl/
Attribute Name Access Data type
modifier
entityClass Protecte Class<T>
d
sessionFactory Private SessionFactory
Methods Name Access Return type
modifier
getSession Public Session
getCriteria Public Criteria
count Public Optional<Long>
findById Public Optional<T>
save Public Optional<ID>
saveOrUpdate Public Void
findAll Public Optional<List<T>>
findAll Public Optional<Page<T>>
delte Public Void
deleteAll Public Void
findAll Public Optional<List<T>>
findAllByExampleLike Public Optional<List<T>>
findUnique Public Optional< <T>
existsById Public Boolean
clear Public Void
flush Public Void

AuthenticationRepositoryImpl
Class AuthenticationRepositoryImpl
Description Public class
171
Source File AuthenticationRepositoryImpl.java
Package com/repository/common/impl/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findByEmail Public Optional<Authentication>
checkExistEmail Public Optional<Long>
checkSocialEmail Public Optional< Long >
changeAccountStatus Public Optional<Boolean>
findAuthByEmail Public Optional<Authentication>

AdminController
Class AuthenticationRepositoryImpl
Description Public class
Source File AuthenticationRepositoryImpl.java
Package com/repository/common/impl/
Attribute Name Access Data type
modifier
adminService
paymentService
Methods Name Access Return type
modifier
getLogger Protecte Logger
d
findShowRom Default RespondEntity<?>
findShowRomByStatus Default RespondEntity<?>
banUser Default RespondEntity<?>
changeStatus Public RespondEntity<ObjectDto>
findPayments Default RespondEntity<?>
changeStatus Public RespondEntity<ObjectDto>
findProject Public RespondEntity<ObjectDto>
changeStartProject Public RespondEntity<ObjectDto>

BaseController
Class BaseController
Description Abstract class
Source File BaseController.java
Package src\main\java\com\controller\base\
Attribute Name Access modifier Data type description
objectMapper Private ObjectMapper
Methods Name Access modifier Return type Description
getLogger Protected Logger
getService Protected IBaseService
existById Public RespondEntity<?>
findById Public RespondEntity<?>
findAll Public RespondEntity<?>
172
count Public RespondEntity<?>
save Public RespondEntity<?>
update Public RespondEntity<?>
findAllByExampleLike Public RespondEntity<?>
findUnique Public RespondEntity<?>
deleteById Public RespondEntity<?>
findAllByExampleLike Protected RespondEntity<?>
findUnique Protected RespondEntity<?>
count Protected RespondEntity<?>
save Protected RespondEntity<?>
update Protected RespondEntity<?>
findAll Protected RespondEntity<?>
deleteById Protected RespondEntity<?>
findById Protected RespondEntity<?>
existsById Protected RespondEntity<?>
createOrder Private Order
createPageRequest Private PageRequest

BaseServiceImpl
Class BaseServiceImpl
Description Abstract class
Source File BaseServiceImpl.java
Package com/services/base/impl/
Attribute Name Access Data type
modifier
getLogger Protecte Logger
d
getRepository Protecte IGenericDAO
d
convertToDto Protecte D
d
convertToEntity Protecte T
d
Methods Name Access Return type
modifier
save Public Optional<ID>
count Public Optional<Long>
saveOrUpdate Public Optional
delete Public Void
existsById Public Boolean
deleteAll Public Void
findAll Public Optional<List<D>>
findAllByExampleLike Public Optional<List<D>>
findUnique Public Optional<D>
findById Public Optional<D>
findAll Public Optional<List<D>>
findAll Public Optional<Page<D>>

173
IAdminService
Class IAdminService
Description Interface
Source File IAdminService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findReport Public Optional<Page<ReportDto>>
findReport Public Optional<Page<ReportDto>>
banUser Public Optional<Boolean>
saveOrUpdateOwner Public Optional<Long>
saveOrUpdatePro Public Optional<Integer>
changeStatusProject Public Optional<Boolean>
findProject Public Optional<List<ProjectDto>>
findPayments Public Optional<List<PaymentDto>>

IAuthenticationRepository
Class IAuthenticationRepository
Description Interface
Source File IAuthenticationRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findByEmail Public Optional<Authentication>
checkExistEmail Public Optional<Long>
checkSocailEmail Public Optional<Long>
changeAccountStatu Public Optional<Boolean>
s
findAuthByEmail Public Optional< Authentication >

IBaseService
Class IBaseService
Description Interface
Source File IBaseService.java
Package com/services/base/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
count Public Optional<Long>

174
saveOrUpdate Public Optional<D>
save Public Optional<ILong>
delete Public Void
existsById Public Boolean
deleteAll Public Void
findAll Public <List<D>>
findAllByExampleLike Public Optional<List<D>>
findUnique Public Optional<D>
findById Public Optional<D>
findAll Public Optional<List<D>>
findAll Public Optional<Page<D>>

IGenericDao
Class IGenericDAO
Description Interface
Source File IGenericDao.java
Package \src\main\java\com\repository\base\core\
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
save Public Optional<ID>
saveOrUpdate Public Void
count Public Optional<Long>
deleteAll Public Void
findAll Public Void
findAll Public Optional<List<T>>
findAllByExampleLike Public Optional<List<T>>
findUnique Public Optional<T>
findById Public Optional<T>
existsById Public Boolean
clear Public Void
flush Public Void
getSession Public Session
getCriteria Public Criteria
getSessionFactory Public SessionFactory

IPaymentRepository
Class IGenericDAO
Description Interface
Source File IGenericDao.java
Package \src\main\java\com\repository\base\core\
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type

175
modifier
save Public Optional<ID>
saveOrUpdate Public Void
count Public Optional<Long>
deleteAll Public Void
findAll Public Void
findAll Public Optional<List<T>>
findAllByExampleLike Public Optional<List<T>>
findUnique Public Optional<T>
findById Public Optional<T>
existsById Public Boolean
clear Public Void
flush Public Void
getSession Public Session
getCriteria Public Criteria
getSessionFactory Public SessionFactory

IPaymentService
Class IPaymentService
Description Interface
Source File IPaymentService.java
Package com/services/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
savePayment Public Optional<PaymentDto>
updatePayment Public Optional<PaymentDto>
findPayment Public Optional<List<PaymentDto>>
changeStatus Public Optional<Boolean>

IProjectRepository
Class IProjectRepository
Description Interface
Source File IProjectRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findOwnProject Public Optional<Page<Project>>
findProProject Public Optional<Page<Project>>
findOwnerProjectByd Public Optional<Project>
findProProjectByProId Public Optional<Project>
findProjectIdByOwnerId Public Optional<Long>

176
findProjectIdByProId Public Optional<Long>
updatePro Public Optional<Boolean>
changeProjectStatus Public Optional<Boolean>
checkExist Public Boolean
updateProjectByPro Public Long
updateProjectByHO Public Long
checkExistProject Public Boolean
checkProject Public Optional<Boolean>
findReview Public Optional<List<Project>>
changeProjectStatus Public Optional<Boolean>
checkProiectClose Public Optional<Boolean>

IReportRepository
Class IReportRepository
Description Interface
Source File IReportRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findReportByStatus Public Optional<Page<Report>>

IUserDetailRepository
Class IUserDetailRepository
Description Interface
Source File IUserDetailRepository.java
Package com/repository/common/core/
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findAllByAuthId Public Optional<UserDetail>
findUserDetailIdByEmail Public Optional<Long>
getAccountStatus Public Optional<Boolean>
findAuthIdByUserID Public Optional< Long >
saveProfileImage Public Optional< Boolean >

PaymentRepositoryImpl
Class PaymentRepositoryImpl
Description Public class
Source File PaymentRepositoryImpl.java
Package com/repository/common/impl
Attribute Name Access Data type
modifier
177
N/A
Methods Name Access Return type
modifier
updateStatus Public Optional<Boolean>
findByProjectId Public Optional<List<Payment> >
deleteByProjectId Public Optional<Boolean>

ReportRepositoryImpl
Class ReportRepositoryImpl
Description Public class
Source File ReportRepositoryImpl.java
Package com/repository/common/impl
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findReportByStatus Public Optional<Page<Report>>

UserDetailRepositoryImpl
Class UserDetailRepositoryImpl
Description Public class
Source File UserDetailRepositoryImpl.java
Package com/repository/common/impl
Attribute Name Access Data type
modifier
N/A
Methods Name Access Return type
modifier
findAllByAuthId Public Optional<UserDetail>
findUserDetailIdByEmail Public Optional<Long>
getAccountStatus Public Optional<Boolean>
findAuthIdByUserID Public Optional< Long >
saveProfileImage Public Optional< Boolean >

178
4.3.3 User interface design
Register

Figure 4- 58 Register account

179
Login

Figure 4- 59 Register account

Home

Figure 4- 60 Home page

180
Edit profile designer

Figure 4-61 Designer profile

Edit house owner’s profile

181
Figure 4- 62 House owner profile

182
Search

Figure 4- 63 Search page

Show profile

Figure 4- 64 Profile page of designer

183
Create request

Figure 4- 65 Request form

184
Request

Figure 4-66 Message page

Create project

Figure 4- 67 Project page (1)

185
Figure 4- 68 Project page (2)

Project detail

Figure 4-69 Project detail

Edit project

186
Figure 4- 70 Designer edit project information

View showroom

Figure 4-71 Designer's showroom page

View image

187
Figure 4-72 View showroom image

Create showroom

Figure 4-73 Create a showroom (1)

188
Figure 4-74 Create a showroom(2)

Payment history

Figure 4-75 Payment history

Change password

189
Figure 4-76 Change password page

Retrive forgot password

190
Figure 4- 77 Receive password page

191
4.3.4 Sequence diagram for each function
Function “Authentication”

Function “Search”

192
Function “View a showroom”

Function “View a designer profile”

193
Function “Login by CI account”

Function “Login by social account”

194
Function “Register a new account”

Function “Forgot password”

195
Function “Change password”

Function “Designer edit profile”

Function “House owner edit profile”

196
Function “Designer send message”

Function “House owner send message”

Function “Designer create a project”

197
Function “House owner view a project”

Function “Designer view a project”

Function “Designer edit a project”

198
Function “Designer create a showroom”

Function “Designer edit a showroom”

Function “Designer delete a showroom”

199
Function “User report a user”

Function “User like an image”

Function “House owner reject a project”

200
Function “House owner accept payment”

Function “Admin close a project”

Function “House owner close a project”

201
Function “Admin view reports”

Function “Admin ban a user”

Function “Admin lock a project”

202
Function “Admin active a project”

Function “Admin active a payment”

4.3.5 Database design


Table Relationship Diagram:

203
Figure 4- 78 Database design

Zoom in for better view

Authentication table
No Field Name Type Max Allow Description
Length Null
1 user_id bigint 20 No Id of user
Primary key
2 email varchar 255 No Email of user use to active account
UNIQUE
3 password varchar 255 No Password of account
4 status int 11 1: not active
2: activated
3: social account

-Role table

No Field Name Type Max Allow Description


Length Null
1 role_id bigint 20 No Role of user
Primary key
2 authority varchar 255 Authority of user
UNIQUE

Authentication_role table
No Field Name Type Max Allow Description
Length Null
1 user_id bigint 20 No Id of user
Compound primary key
2 role_id bigint 20 No Role of user
Compound primary key
Foreign key references to role_id in
table Role.

204
User_detail table
No Field Name Type Max Allow Description
Length Null
1 user_id bigint 20 No Id of user
Primary key
2 address varchar 255 Address of user
3 avatar varchar 255 Avatar of user
4 birth_date date time Birth date of user
5 first_name varchar 255 First name of user
6 gender int 11 Gender of user
7 last_name varchar 255 Last name of user
8 phone varchar 255 Phone numbers of user
9 status bit 1 0: the information is not updated
1: the information is updated
10 user_authentication_id bigint 20 No Foreign key references user_id in
table authentication

Verification_token table
No Field Name Type Max Allow Description
Length Null
1 id bigint 20 No Primary key
2 expiry_date datetime The expiration date of the token
3 token bigint 255 The token key to authenticate user
4 authentication_id bigint 20 No Foreign key

Professional_detail table
No Field Name Type Max Allow Description
Lengt Null
h
1 professional_id bigint 20 No Id of designer
Primary key
2 city varchar 255 City of designer
3 contact varchar 255 Contact of designer
4 fb_link varchar 20 Link Facebook of designer
5 introduction varchar 255 Designer description
6 youtube_link varchar 255 Link YouTube of designer
7 user_detail_id bigint 20 No Id of user
UNIQUE
Foreign key references to
user_id in table user_detail
8 designer_account_holder_name varchar 255 No
9 designer_bank_account_number varchar 255 No Bank account of designer
10 designer_bank_name varchar 255 No Bank name of designer
11 designer_company_name varchar 255 Company name of designer
12 designer_roll varchar 255 Roll of designer
13 average_rate double Avarage rate of designer

205
Owner_detail table
N Field Name Type Max Allow Description
o Lengt Null
h
1 owner_id bigint 20 No Id of home owner
Primary key
2 area int 11 area of current project
3 description varchar 255 Home’s describe
4 user_detail_id bigint 20 No Id of user
UNIQUE
Foreign key references to user_id in
table user_detail

Show_room table
N Field Name Type Max Allow Description
o Lengt Null
h
1 show_room_id bigint 20 No Id of show room
Primary key
2 show_room_estimate_price double Estimate price of show room
3 show_room_introduction varchar 255 Show room’s describe
4 show_room_location varchar 255 Show room location
Foreign key references to user_id
in table user_detail
5 show_room_title varchar 255 Show room title
6 professional_id bigint 20 No Foreign key references to
professional_id in table
professional_detail

Image_show_room table
N Field Name Type Max Allow Description
o Lengt Null
h
1 image_show_room_id bigint 20 No Id of show room image
Primary key
2 image_estimate_price double Estimate price
3 image_link varchar 255 Image link
4 show_room_id bigint 20 No Id of show room
Foreign key references to
show_room_id in table show_room
5 description varchar 255 Description of image

Request table
N Field Name Type Max Allow Description
o Length Null
1 request_id bigint 20 No Id of request
Primary key
206
2 create_date datetime Date create request
3 description varchar 255 Description of a request
4 title varchar 255 Request title
5 owner_id bigint 20 No Id of owner
Foreign key references to user_id in table
owner_detail
6 professional_id bigint 20 No Foreign key references to professional_id in table
professional_detail
7 status int 11 0: not yet read
1: read

Project table
No Field Name Type Max Allow Description
Lengt Null
h
1 project_id bigint 20 No Id of project
Primary key
2 create_date datetime No Date create project
3 description varchar 255 No Project description
4 designer_account_holder_name varchar 255 No Name of designer’s account
5 designer_address varchar 255 No Address of designer
6 designer_bank_account_number varchar 255 No Bank account numbers of
designer
7 designer_bank_name bigint 255 No Bank name of designer’s
account
8 designer_company_name varchar 255 Company name of designer
9 designer_email varchar 255 No Email of designer
10 designer_full_name varchar 255 No Full name of designer
11 designer_phone varchar 255 No Phone numbers of designer
12 designer_roll varchar 255 Roll of designer
13 end_date datetime End date of project
14 house_owner_account_holder_name varchar 255 No Name of house owner’s
account
15 house_owner_address varchar 255 No House owner address
16 house_owner_bank_account_number varchar 255 No Bank account numbers of
house owner
17 house_owner_bank_name varchar 255 No Bank name of house owner
18 house_owner_company_name varchar 255 Company name of house
owner
19 house_owner_email varchar 255 No Email of house owner
20 house_owner_full_name varchar 255 No Full name of house owner
21 house_owner_phone varchar 255 No Phone numbers of house
owner
22 house_owner_rol varchar 255 Roll of house owner
23 project_name varchar 255 No Name of project
24 status int 11 No Status of project
25 request_id bigint 20 No Id of request
UNIQUE
Foreign key references to
207
request_id in table request
26 rate double rate of a project
27 project_comment varchar 255 comment of house owner in
CI-project

Message table
N Field Name Type Max Allow Description
o Length Null
1 message_id bigint 20 No Id of message
Primary key
2 content varchar 255 Message content
3 receiver_id bigint 20 Id of receiver
4 sender_id bigint 20 Id of sender
5 request_id bigint 20 No Id of request
Foreign key references to request_id in table
request
6 file_link varchar 255 Link of file

Report table
N Field Name Type Max Allow Description
o Length Null
1 report_id bigint 20 No Id of report
Primary key
2 create_date datetime Date create report
3 description varchar 255 Report description
4 status bigint 20 0: not yet read
1: read
5 user_reported_i bigint 20 No Foreign key references to user_id in table
d user_detail
6 user_report_id bigint 20 No Foreign key references to user_id in table
user_detail

Showroom_category table
N Field Name Type Max Allow Description
o Length Null
1 id bigint 20 No Id of showroom
Primary key
2 name varchar 255 Name of showroom

Oauth_access_token table
No Field Name Type Max Allow Description
Length Null
1 authentication_id varchar 255 No Id of authentication
Primary key
2 Token_id varchar 255 No Id of token
3 Token blob No Token
208
4 User_name varchar 255 No Username
5 client_id varchar 255 No Id of client
6 authentication Blob No Authentication key of user
7 Refresh_token varchar 255 No Refresh token key of user

Show_room_like table
N Field Name Type Max Allow Description
o Length Null
1 user_id bigint 20 No Id of showroom
Compound primary key
Foreign key references to show_room_id in
table show_room
2 image_show_room_id bigint 20 No Id of category
Compound primary key
Foreign key references to id in table
showroom_category
3 Show_room_like bit 1 1: showroom is liked
0: showroom is not liked.

Showroom_n_category table
N Field Name Type Max Allow Description
o Length Null
1 showroom_id bigint 20 No Id of showroom
Compound primary key
Foreign key references to show_room_id in table
show_room
2 category_id bigint 20 No Id of category
Compound primary key
Foreign key references to id in table
showroom_category

Version table
N Field Name Type Max Allow Description
o Length Null
1 version_id bigint 20 No Id of project version
Primary key
2 description varchar 255 Version description
3 project_id bigint 20 No Id of project
Foreign key references to project_id in table
project
4 create_date datetime Date create project version

Payment table
N Field Name Type Max Allow Description
o Length Null
1 Id bigint 20 No Id of payment

209
Primary key
2 amount double Amount of payment
3 end_date datetime End date of project
4 Name varchar 255 Date create project version
5 start_date datetime Start date of payment
6 status int 11 0: not paid
1: paid
2: paying
3: paid to designer
7 project_id bigint 20 No Id of project
Foreign key references to project_id in table
project
8 description varchar 255 Description of payment

Payment_history table
N Field Name Type Max Allow Description
o Length Null
1 type bigint 20 No Compound primary key
2 time bigint 20 No Compound primary key
3 payment_id bigint 255 No Id of payment
Compound primary key
Foreign key references to id in table payment
4 description varchar 255 Description of payment
5 payment_amount double Amount money of the payment history

Project_file table
N Field Name Type Max Allow Description
o Length Null
1 project_file_id bigint 20 No Id of project file
Primary key
2 create_date datetime Date create file
3 link varchar 255 Link to resource server
4 name varchar 255 Name of file
5 project_id bigint 20 No Id of project
Foreign key references to project_id in table
project
6 description varchar 255 Description of file

File table
N Field Name Type Max Allow Description
o Length Null
1 file_id bigint 20 No Id of file
Primary key
2 file_description varchar 255 File description
3 file_link varchar 255 Link of file
4 file_name varchar 255 Name of file
5 upload_date datetime Date upload file
210
6 version_id bigint 20 No Id of project version
Foreign key references to version_id in table
version

Oauth_refresh_token table
N Field Name Type Max Allow Description
o Length Null
1 token_id varchar 255 No ID of token , Primary key
2 token blob No Token string
3 authentication blob No Authentication string

211
Chapter 5 - Software Testing Document
5.1 Purpose
This is the software testing document of CI system. The purpose of this chapter is to describe the
strategy and plan, the test approach and defect log.
The strategy defines the objective and scope of testing, human resource and acceptance
criteria for a successful project. The risk list is pre-define by consulting from expert and brain
storming. The strategy is carried out by project manager.
The test plan includes the model of testing that is the most suitable base on human resources
and development processes. The tester leader takes responsibilities to plan the functional to be
tested base on SRS, choose the type of test for each stage and making a plan for schedule and
deliverable to project manager.

5.2 Test strategy


5.2.1 Objective and scope
The objective of testing is to satisfy all the requirement of the business use cases. The scope of this
test will be limited to testing CI web application. The quality goal is at least 99% percent of test cases
to be tested and passed.

5.2.2 Testing tools and environment


Testing tools:

No Name Version Description


1 Google chrome 68.0.3440.84 GUI testing
2 Angular CLI 6.0.8 Angular unit test
3 Spring-boot-starter-test library 2.0.4 Java unit test
4 IntelliJ IDEA 2018.2 IDE for java unit test

Testing environment:

# Type of testing Software Hardware


1 Unit test Chrome 68.0.3440.84 Personal computer with
minimum:
IntelliJ IDEA 2018.2 community Intel core i5
Ram 8GB
Angular 6.0.8
Node v.8.11.2
2 Integration and Chrome 68.0.3440.84 Personal computer with
system test IntelliJ IDEA 2018.2 community minimum:
Angular 6.0.8 Intel core i5
Node v.8.11.2 Ram 8GB
CentOS 7

212
5.2.3 Human resources and responsibilities
Name Role Responsibilities
Vũ Việt Anh Project manager - Manage overall of the software quality
Test leader - Define test strategy.
- Define test plan, test approach.
- Create and review test case, defect log.
Nguyễn Đình Mai Tester - Implement integration test following requirement.
- Logging test case and defect log.
Nguyễn Văn Tú Developer - Create unit test
- Execute unit test
Đỗ Duy Tân Developer - Create unit test
- Execute unit test

5.2.4 Acceptance criteria


These acceptance criteria are following this constraint:

No Acceptance criteria Note


1 100% test case executed
2 98% pass rate test cases
3 95% of medium severity defects have been closed
4 100% of high severity defects have been closed

5.2.5 Risk list


No Condition Mitigation Contingency Doer
1 The hardware maybe Change hardware Re-plan schedule VietAnh
corrupted when testing
2 Time for testing may is Add more resource to Re-plan schedule VietAnh
not enough. implement testing
3 Unit test is not good or Push teammate do unit Add more resource VietAnh
have not enough time to test correct with to implement
implement unit test schedule testing.

5.2.6 Test process


The test process is following the FPT-Software testing process:

213
Figure 5- 79 Test process

Description:

1. Test plan: test leader takes responsible to create a test plan.


2. Test preparation: Testing team study the SRS document, create test design for each stage.
3. Test execution: tester and developer perform the test following the plan. The bug is logged
by tester and developer is assigned to fix the code in order to fix the bugs.

5.3 Test plan


5.3.1 Test model
This project follows V-Model process to implement testing. The V-model takes the bottom half of
each iterative and bends it upward into the form of a V, so that the activities on the right verify and
validate the work products of the activity on the left.

 The advantages of this model for our team are:


 Small projects where the requirement are easily to understood.
 Time saving and suitable for each iterator.
 Testing activity and planning is happened well before coding.

214
Figure 5- 80 V-Model testing

5.3.2 Stage of testing


No Testing Description Implementation
level
1 Unit test  Unit test is performed by developers. Development team:
 All the test cases are NOT documented. 1. Đỗ Duy Tân
2. Nguyễn Văn Tú
2 Integration  Integration testing is performed by testers. Tester team:
test Material are “Integration_test_case.xls”. 1. Vũ Việt Anh
2. Phạm Đình Mai
3 System test  System test is performed by testers. Tester team:
 Material are “System_test_case.xls”. 1. Vũ Việt Anh
2. Phạm Đình Mai
4 Acceptance  Acceptance test is performed by BA. BA team:
test  Material are “User requirements”, “Check list” 1. Vũ Việt Anh
 All the acceptance test cases are not 2. Nguyễn Văn Tú
documented. 3. Phạm Đình Mai
215
5.3.3 Functions to be tested
No Actor Name Number of test case Start date End date
(Estimate)
1 Register account 3 22/05/201 22/05/2018
8
2 Login 4 22/05/201 22/05/2018
8
3 Search showroom 3 01/08/201 02/08/2018
8
4 View a showroom 3 01/08/201 02/08/2018
8
5 View a designer 2 01/08/201 02/08/2018
8
6 Edit profile 3 23/05/201 23/05/2018
8
7 View project 2 24/05/201 24/05/2018
Designer
8
8 Create a project 4 24/05/201 24/05/2018
8
12 Edit project 2 25/05/201 25/05/2018
8
16 Create showroom 7 02/08/201 03/08/2018
8
17 Delete showroom 7 02/08/201 03/08/2018
8
18 Edit showroom 4 02/08/201 03/08/2018
8
19 Send message 3 27/05/201 27/05/2018
8
21 Owner Register account 3 28/06/201 28/06/2018
8
22 Login 4 28/06/201 28/06/2018
8
23 Search showroom 3 02/08/201 03/08/2018
8
24 View a showroom 3 03/08/201 04/08/2018
8
25 Like gallery 2 03/08/201 04/08/2018
8
26 View a designer 2 03/08/201 04/08/2018
8
27 Search a designer 4 03/08/201 04/08/2018
8
28 Edit profile 2 04/08/201 05/08/2018
8
29 Create request 2 30/06/201 30/06/2018
8
30 Send message 2 30/06/201 30/06/2018
8
31 Accept project 2 01/07/201 01/07/2018
216
8
32 View project 2 01/07/201 01/07/2018
8
33 Close project 4 01/07/201 01/07/2018
8
34 Accept payment 4 02/07/201 02/07/2018
8
35 View payment 2 04/08/201 05/08/2018
8
36 Admin View a user profile 2 04/08/201 05/08/2018
8
37 Ban a user 2 04/08/201 05/08/2018
8
38 View reports 3 03/07/201 03/07/2018
8
39 Active a project 5 03/07/201 03/07/2018
8
40 Active a payment 5 04/07/201 04/07/2018
8
41 Lock a project 4 04/07/201 04/07/2018
8
42 Close a project 3 04/07/201 04/07/2018
8

5.3.4 Functions not to be tested


Actor Function name
Guest Login by facebook account

5.3.5 Type of testing


The different types of testing that will be carry out this project are:

No Type of test Description


1 Automation unit test  Testing on code level to identify bugs in functions.
2 GUI test  GUI test the user interface of the software. It will be performed
fully on all screens. The target is cover the verification of mocks
defined before. It also includes fields:
1. Check if error messages are displayed correctly.
2. Check if Font is readable.
3. Check the screen solution
3 Functional test  Functional test is used to test for each logical path of use case.
4 Acceptance test  Passing all the use case without critical errors.

 The table below are the stages in which test are executed:

Type of tests Stage of test


Unit Integration System Acceptance
Automation unit √

217
test
GUI test √ √ √
Functional test √ √ √
Acceptance test √
5.3.6 Test milestone
Start date End date
Task
Iterator 1 Create test plan 21/05/2018 23/05/2018
Review and update test plan 24/05/2018 24/05/2018
Create and review system test 25/05/2018 30/05/2018
Create and review integration test 01/06/2018 04/06/2018
Execute unit test 05/06/2018 20/06/2018
Execute integration test 21/06/2018 26/06/2018
Execute system test 27/06/2018 27/06/2018
Execute Acceptance test 28/06/2018 28/06/2018
Iterator 2 Create test plan 29/06/2018 03/07/2018
Review & update test plan 04/07/2018 04/07/2018
Create and review system test 05/07/2018 10/07/2018
Create and review integration test 10/07/2018 13/07/2018
Execute unit test 16/07/2018 25/07/2018
Execute integration test 25/07/2018 31/07/2018
Execute system test 01/08/2018 10/08/2018
Execute acceptance test 13/08/2018 14/08/2018

5.3.7 Deliverables
No Deliverables Responsibilities Delivered date
1 Test plan Vũ Việt Anh 03/07/2018
2 Unit test Đỗ Duy Tân, Nguyễn Văn Tú 25/07/2018
3 Integration test Phạm Đình Mai, Vũ Việt Anh 31/07/2018
4 System test Phạm Đình Mai, Vũ Việt Anh 10/08/2018
Acceptance test Vũ Việt Anh 13/08/2018
5 Defect logs Vũ Việt Anh , Phạm Đình Mai 13/08/2018
6 Final test summary report Vũ Việt Anh 14/08/2018

5.4 Test approach


5.4.1 Unit test
1. Right click on class name.
2. Choose create test

218
Figure 5- 81 Choose class to be tested

3. Choose function to be test

Figure 5-82 Choose method to be tested

4. View a result.

219
Figure 5- 83 Result of unit test

5.4.2 Integration and system test


The detail test case is following the template of FPT-Software. It is written in
“Integration_test_case_v2.0.xls” and “System_test_case_v2.0.xls”.

Integration test example:

Figure 5- 84: Test module DesignerProjectMgmtModule

System test example:

220
Figure 5- 85 System test case example

5.4.3 Check list


The checklist below is used in acceptance test stage:

ID Check list description Yes No


General
CL_0 Text on all pages for spelling and grammatical errors. √
1
CL_0 Functionality of buttons available on all pages. √
2
CL_0 Validation error messages are displayed properly. √
3
CL_0 Delete functionality for any record on page are asked for √
4 confirmation.
CL_0 All numeric values are formatted properly. √
5
CL_0 Navigation space is the same on all page √
6
CL_0 Feature buttons on allpage display with the right role of users. √
7
CL_0 Contact information part display at the bottom of the home page. √
8
CL_0 Numeric fields check whether negative numbers could be displayed. √
9
CL_1 Vietnamese language is used for all pages. √
0
CL_1 Time and date in message is arranged from new to old. √
1
GUI and usability
CL_1 Radio option and text field aligned properly √
2
CL_1 Information in combobox is sorted. √
3
CL_1 Display error page when error. √
4
CL_1 Correct type of dialog box is used. √
5
221
CL_1 Waiting icon appear for waiting display data. √
6
CL_1 Hyperlink use standard colors. √
7
CL_1 Color red is used for all error message. √
8
CL_1 New message are displayed different from seen message. √
9
CL_2 Project state is displayed and colored with appropriate state √
0

5.5 Defect log


5.5.1 Defect life cycle

Figure 5-86 Defect life cycle

Description:

1. Creative Inside uses Google Docs with template of FPT-Software for logging defects.
2. Processes detail:
 Tester will log bugs for each module, change the status and assign for developer.
 Developer fix bugs and change status of bugs to resolve.
 If the bug is fixed then tester change the status to close, otherwise will be re-open again
to fix.

5.5.2 Defect example


The defect is logged in “Defect_log_v2.0.xls”. An example is the following picture:

222
Figure 5-87 Defect log example

5.6 Test report


5.6.1 Integration test report

Figure 5- 88 Integration test report

5.6.2 System test report

Figure 5- 89 System test report

223
Chapter 6 - SOFTWARE USER GUIDE
6.1 Deployment guidelines
6.1.1 Environment for user
No System requirement Description
1 CPU Intel Core i3 2.20 Ghz or above
2 RAM 2GB or above
3 Operating system Windows 10 version 1803

6.1.2 Deploy CI web application for system admin


Get project from git
 Git clone https://gitlab.com/jgeeks-ci/CI-Web.git

Install and build project


 Install library:
i. Using command “npm install”

 Build project:
ii. Using command “ng build --prod --build-optimizer --base-href /”

224
 Run project
iii. Using command:
“cd dist”
“pm2 start angular-http-server –p 8080”

 Setting nginx server:


iv. Using command “cd /etc/nginx”
v. “vi nginx.conf”

 Add configuration

vi. press “Esc” and using command “wq” to save and quit
 Restart service nginx:
vii. Using command “restart nginx.service”

225
6.1.3 Deploy CI web services for system admin
Build ci-da project
 Clone “ci-da” project from git:
viii. Using command “git clone https://gitlab.com/jgeeks-ci/ci-da.git”

 Build project
ix. Using command “cd ci-da”
x. Using command “mvn clean install”

226
Buid ci-model project
 Get project from git
xi. Using command “git clone https://gitlab.com/jgeeks-ci/ci-model.git”

 Build project
xii. Using command “cd ci-model”
 Using command “mvn clean install”

Build API server project


 Get project from git
 Using command “git clone https://gitlab.com/jgeeks-ci/CI-API-Server.git”

 Build project
 Using command “cd CI-API-SERVER”
 Using command “mvn install -Dskiptest“

227
Run CI-API-Server
- Using command “Cd target”
- Using command “Java –jar CreativeInside-0.0.1-SNAPSHOT.jar &disown”

 Setting nginx server


- Using command “cd /etc/nginx”
- Using command “vi nginx.conf”

Server configuration

228
6.2 User guide
6.2.1 Guest
Register

 In Creative Inside website, user clicks on button “Đăng ký”.

 User fills information to text field such as “Email”, “Mật khẩu”, …


o “Email” field: enter your email.
o “Mật khẩu” field: enter your password.
o “Nhập lại mật khẩu” field: enter repeat password.
o “Họ đệm” field: enter your last name.
o “Tên” field: enter your first name.
o “Loại tài khoản” button: select your role, default is customer.
 Button “Đăng ký”: agree to the terms of the Creative Inside to register account.
 If you have Google account, click on “Google” button to login.

229
6.2.2 User
Search

 At the Creative Inside website, the search text field is displayed at the top of the page.

 User enter keyword search then click on “Tìm kiếm” button.

230
View showroom

 In homepage, user clicks on a service to view the showroom.

231
 In category page, user clicks on a showroom to view showroom detail.

232
View designer profile

 In Home page, user clicks on a service to view the showroom.

233
 In category page, user clicks on a designer to view the designer’s profile.

234
 Login

 In Creative Inside website, user clicks on button “Đăng nhập”.

 Enter your account and password into “E-mail” field and “Mật khẩu” field.
 After you enter all your information, click on button “Đăng nhập”.
 If you forgot your password, click the “Quên mật khẩu” link.

6.2.3 Designer
Logout

 After login to the system at the screen with have “Đăng xuất” link after you click on your
avatar.
 Click on “Đăng xuất” link to logout of the system.

235
Edit profile

 In Create Inside website, click on your name after clicking on your avatar.

236
 In “edit-profile-designer” page, you can edit your personal profile such as your full name,
address, …
o “Họ đệm” field: edit your last name.
o “Tên” field: edit your first name.
o “Địa chỉ” field: edit your address.
o “Tỉnh/Thành phố” field: edit your city.
o “Ngày sinh(năm/tháng/ngày)” field: edit your birth date.
o “Số điện thoại” field: edit your phone numbers.
o “Website” field: edit your website.
o “Tên công ty” filed: edit your compa.
o “Chức vụ” field: edit your position in your compa.
o “YouTube” filed: edit your YouTube link.
o “Facebook” field: edit you Facebook link.
o “Tên tài khoản” field: edit your bank account name.
o “Số tài khoản” field: edit your bank account number.
o “Chi nhánh ngân hàng” field: edit your bank branch.
o “Giới thiệu bản thân” field: edit your introduction.
o “Chọn ảnh” button: edit your avatar.
o “Lưu” button: save your avatar.
 Click on button “Lưu”: designer information will be uploaded.

237
Send messages

 After house owner sends you a request, in Create Inside website, click on the icon “Yêu cầu”.

 Click a request in list request.

238
 Enter the message and click on the fly icon or press enter key from keyboard to send message.

Create project

 After house owner sends you a request, in Create Inside website, click on the icon “Yêu cầu”.

239
 Click a request in list request, the message box will display.
 Click on button “Tạo dự án”.

240
 You can enter project information of house owner such as “Đại diện Ông/Bà”, “Chức vụ”, … in
the first provision:
o “Tên dự án” field: project name.
o “Đại diện Ông/Bà” field: name of house owner.
o “Chức vụ” field: position of house owner in the compa.
o “Mã số thuế” field: tax number of house owner.
o “Chủ tài khoản” field: bank account of house owner.
o “Số tài khoản” field: bank account number of house owner.
o “Mở tại ngân hàng” field: bank branch of house owner.
o “Địa chỉ” field: address of house owner.
o “Điện thoại” field: phone numbers of house owner.
o “Email” field: email of house owner.
 You can enter project information of house owner such as “Đại diện Ông/Bà”, “Chức vụ”, … in
the second provision:
o “Đại diện Ông/Bà” field: name of house owner.
o “Chức vụ” field: position of house owner in the compa.
o “Mã số thuế” field: tax number of house owner.
o “Chủ tài khoản” field: bank account of house owner.
o “Số tài khoản” field: bank account number of house owner.
o “Mở tại ngân hàng” field: bank branch of house owner.
o “Địa chỉ” field: address of house owner.
o “Điện thoại” field: phone numbers of house owner.
o “Email” field: email of house owner.
241
 Click on button “Bổ sung điều khoản” to add more provision.

 Enter provision then click on button “Xác nhận” to confirmation provision.


 Click outside the pop-up to cancel creating the provision.
 Click on button “Thêm công việc” to create payment.

 You can add more than one payment, one project has at least one payment.
 You can enter information of payment such as “Tên công việc”, “Ghi chú”, …
o “Tên công việc” field: name of payment.
o “Ghi chú” field: description of payment.
o “Khối lượng tiền ước tính (x1000)” field: price of payment.
o “Thời gian làm việc(ngày/tháng/năm)” field: time of payment.
 Click on button “Xác nhận” to confirmation payment.
 Click outside the pop-up to cancel creating the payment.
 Click the “Tạo dự án” button to finish creating the project.

242
View a project

 In Creative Inside website, click on the icon “Dự án”.

 Click on a project and you can view this project details.

243
Edit a project

 In Creative Inside website, click on the icon “Dự án”.

 Click on a project have “Mới” or “Từ chối” status.

244
 Click on button “Chỉnh sửa thông tin”.

245
Create showroom

 In Creative Inside website, click on “Bộ sưu tập” after click on your avatar.

 Click on button “+”.

246
 In “create-showroom” page, you can create showroom such as title, description, …
o “Tiêu đề” field: title of showroom.
o “Mô tả” field: description of showroom.
o “Tỉnh/Thành phố” field: address of showroom.
o “Chọn loại dịch vụ” list: type of showroom.
o “Chon ảnh” button: image of showroom.
o “Xóa hết” button: delete all image selected.

247
 Click on button “Tạo”: complete creation of showroom.

Edit showroom

 In Creative Inside website, click on “Bộ sưu tập” after click on your avatar.

 Click on showroom you want to edit.

248
 Click on button “Chỉnh sửa thông tin”.

 You can edit showroom information such as: title, address, …

249
o “Tiêu đề” field: edit title of showroom.
o “Địa chỉ” field: edit address of showroom.
o “Giới thiệu” field: edit introduction of showroom.
 Click on button “Lưu”: showroom information will be uploaded.
 Click on button “Hủy”: cancel edit showroom information.

Delete showroom

 In Creative Inside website, click on “Bộ sưu tập” after click on your avatar.

 Click on showroom you want to delete.

250
 Click on button “Xóa mẫu thiết kế này” to delete showroom.
 Click on button “Đồng ý” to confirmation delete showroom.

251
Report designer

 In Creative Inside website, click on a service in homepage.

 Click on a showroom in “category” page.

252
 Click on button “Báo cáo”.

 Enter reason then click on button “Xác nhận” to finish report.


 Click outside the pop-up to cancel report.

253
Report house owner

 In Creative Inside website, click on icon “Dự án”.

 Click on a project have “Đang làm” status.

254
 Click on button “Báo cáo”.

 Enter information and click on button “Xác nhận”.


 Click outside the pop-up to close the report.

Like images

 In Creative Inside website, click on a service in homepage.

255
 Click on a showroom.

 Click on image.

256
 Click on icon heart to like image.

Forgot password

 In Creative Inside website, user clicks on button “Đăng nhập”.

257
 Click on link “Quên mật khẩu”.

 Enter your email to “E-mail” field then click on button “Gửi”.

258
 Open your email and click on button “here”.

 Enter new password into “Mật khẩu mới” field and repeat new password into “Nhập lại mật
khẩu mới” to create new password.

Change password

259
 After login to the system, at the screen with have “Đổi mật khẩu” link after click on your
avatar.

 Enter information to change password:


o “Mật khẩu cũ” field: enter old password.
o “Mật khẩu mới” field: enter new password.
o “Nhập lại mật khẩu mới” field: enter repeat new password.
 Click on button “Lưu”: password will be updated.

6.2.4 House owner


Logout

 After login to the system, at the screen with have “Đăng xuất” link after you click on your
avatar.
 Click on “Đăng xuất” link to logout of the system.

260
Edit profile

 In Create Inside website, click on your avatar.

 In “edit-profile-houseowner” page, you can edit your personal profile such as your name,
address, …
o “Họ đệm” field: edit your last name.
o “Tên” field: edit your first name.
o “Địa chỉ” field: edit your address.
o “Ngày sinh(năm/tháng/ngày)” field: edit your birth date.
o “Số điện thoại” field: edit your phone numbers.
o “Loại nhà cần thiết kế” field: edit type of house you want to find designer.
o “Diện tích” field: edit area of your house.
o “Chọn ảnh” button: edit your avatar.

261
o “Lưu” button: save your avatar.
 Click on button “Lưu”: house owner information will be uploaded.
Picture confirmation message
 Click on button “OK” to confirmation edit your information successfully.

Create request

 Click a service in the home page.

262
 Click on a showroom.

 Click on the “Gửi yêu cầu” button.


263
 In this dialog, you can edit your request such as “Họ và tên”, “địa chỉ”, …
o “Họ và tên” field: your full name.
o “Số điện thoại” field: your phone numbers.
o “Thông tin chung” field: project information.
o “Thông tin mô tả” field: project description.
 Click on close button at the top-right to close request.
 Click the “Gửi yêu cầu” button to send request to designer.

264
Send messages

 After you create a request, in Create Inside website, click on the icon “Yêu cầu”.

 Enter the message and click on the fly icon or press enter key from keyboard to send
message.

265
Accept project

 If designer create the project as per your request, in Creative Inside website, click on the
icon “Dự án”.

 Click the project have “Mới” status.

266
267
 You have to read the project information carefully then click on the “Xác nhận” button.
 Project status has changed from “Mới tạo” to “Chờ duyệt”.

View a project

 If you have at least one project, in Creative Inside website, click on the icon “Dự án”.

268
 Click on a project.

 Click on button “Xem hợp đồng” to view project contract.

269
Reject project

 If designer create the project as per your request, in Creative Inside website, click on the
icon “Dự án”.

 Click the project have “Mới” status.

270
 You have to read the project information carefully then click on the “Cần sửa đổi” button.
 Project status has changed from “Mới” to “Đã từ chối”.

Accept a payment

 If designer create the project as per your request, in Creative Inside website, click on the
icon “Dự án”.

271
 Click the project have “Đang làm” status.

 Click on button “Duyệt công việc”.

272
Close project

 If designer create the project as per your request, in Creative Inside website, click on the
icon “Dự án”.

 Click the project have “Đang làm” status.

273
 Click on button “Đóng dự án”.

 Enter review about designer and click on button “Save”.

274
 Click on button “OK” to confirmation close project.

Like images

 In Creative Inside website, click on a service in home page.

275
 Click on a showroom.

276
 Click on image.

 Click on icon heart to like image.

Forgot password

 In Creative Inside website, user clicks on button “Đăng nhập”.

277
 Click on link “Quên mật khẩu”.

 Enter your email to “E-mail” field then click on button “Gửi”.

278
 Open your email and click on button “here”.

 Enter new password into “Mật khẩu mới” field and repeat new password into “Nhập lại mật
khẩu mới” to create new password.

Change password

 After login to the system, at the screen with have “Đổi mật khẩu” link after click on your
avatar.
279
 Enter information to change password:
o “Mật khẩu cũ” field: enter old password.
o “Mật khẩu mới” field: enter new password.
o “Nhập lại mật khẩu mới” field: enter repeat new password.
 Click on button “Lưu”: password will be updated.

280
References
https://evbn.org/vietnam-furniture-home-decor-report/

https://math.stackexchange.com/questions/942738/algorithm-to-calculate-rating-based-on-
multiple-reviews-using-both-review-score

https://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html

https://angular.io/guide/styleguide

https://www.w3schools.com/jsref/jsref_tofixed.asp

https://developers.google.com/identity/protocols/OAuth2

https://crypto.stackexchange.com/questions/26064/advantages-disadvantages-of-bcrypt-vs-hash-
salt

https://oauth.net/articles/authentication/

https://angular.io/guide/form-validation

281

You might also like