Skip to content

Commit

Permalink
add create and delete requirements feature
Browse files Browse the repository at this point in the history
also add installer
  • Loading branch information
guilhermeomt committed Jun 15, 2022
1 parent be60692 commit 97beae8
Show file tree
Hide file tree
Showing 24 changed files with 1,033 additions and 174 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,6 @@ Makefile.Release

*.ini
*.Debug
*.Release
*.Release

installer/*.exe
9 changes: 9 additions & 0 deletions installer/config/config.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<Installer>
<Name>Rexpress</Name>
<Version>1.0</Version>
<Title>Rexpress</Title>
<Publisher>CCUENF</Publisher>
<StartMenuDir>Rexpressr</StartMenuDir>
<TargetDir>@HomeDir@/Rexpress</TargetDir>
</Installer>
Empty file.
8 changes: 8 additions & 0 deletions installer/packages/com.vendor.product/meta/package.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<Package>
<DisplayName>Rexpress</DisplayName>
<Description>Uma ferramenta simples para gerenciamento de requisitos</Description>
<Version>1.0</Version>
<ReleaseDate>2022-06-14</ReleaseDate>
<Default>true</Default>
</Package>
2 changes: 1 addition & 1 deletion rexpress.pro.user
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 7.0.0, 2022-06-06T11:53:14. -->
<!-- Written by QtCreator 7.0.0, 2022-06-14T18:29:41. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
Expand Down
2 changes: 1 addition & 1 deletion src/app/app.pro
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ ANIMATIONS_OUT_ROOT = $${OUT_PWD}/../

QT += core gui widgets sql

TARGET = CentralWidgetExample
TARGET = Rexpress
DESTDIR = $${ADS_OUT_ROOT}/lib
TEMPLATE = app
CONFIG += c++14
Expand Down
2 changes: 0 additions & 2 deletions src/app/database/repositories/invitationsrepository.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,6 @@ Invitation* InvitationsRepository::create(Invitation entity) {
Invitation* InvitationsRepository::update(Invitation entity) {
QSqlQuery query;

qDebug() << entity.getId() << entity.getInviterId() << entity.getInviteeId()
<< entity.getProjectId() << entity.getStatus() << entity.getCreatedAt();
query.prepare("UPDATE invitations SET inviter_id = :inviterId, invitee_id = :inviteeId"
" project_id = :projectId, status = :status, created_at = :createdAt"
" WHERE id = :id");
Expand Down
247 changes: 228 additions & 19 deletions src/app/database/repositories/requirementsrepository.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,53 +4,262 @@ RequirementsRepository::RequirementsRepository(DBManager* dbmanager, QObject* pa
m_dbmanager->open();
};


std::list<Requirement> RequirementsRepository::getAll() {
QSqlQuery query("SELECT id, name, description, owner_id, created_at, updated_at FROM projects");
QSqlQuery query("SELECT id, definition, especification, status, type, "
"priority, project_id, created_at, updated_at, created_by_id, "
"updated_by_id, parent_requirement_id FROM requirements");

std::list<Requirement> list;
while (query.next())
{
QString id = query.value(0).toString();
QString definition = query.value(1).toString();
QString especification = query.value(2).toString();
RequirementStatus status = Requirement::convertStatus (query.value(3).toString());
QString type = query.value(4).toString();
QString priority = query.value(5).toString();
QString project_id = query.value(6).toString();
QString created_at = query.value(7).toString();
QString updated_at = query.value(8).toString();
QString created_by_id = query.value(9).toString();
QString updated_by_id = query.value(10).toString();
QString parent_requirement_id = query.value(11).toString();

Requirement requirement(id, definition, especification, type, status, priority, project_id,
created_at, updated_at, created_by_id, updated_by_id, parent_requirement_id);
list.push_front(requirement);
}
return list;
}

std::list<Requirement> RequirementsRepository::getByProjectId(QString projectId) {
QSqlQuery query;

query.prepare("SELECT id, definition, especification, status, type, "
"priority, project_id, created_at, updated_at, created_by_id, "
"updated_by_id, parent_requirement_id FROM requirements WHERE project_id = :projectId");
query.bindValue(":projectId", projectId.toInt());
query.exec();

std::list<Requirement> list;
while (query.next())
{
QString id = query.value(0).toString();
QString name = query.value(1).toString();
QString description = query.value(2).toString();
QString ownerId = query.value(3).toString();
QString createdAt = query.value(4).toString();
QString updatedAt = query.value(5).toString();
QString definition = query.value(1).toString();
QString especification = query.value(2).toString();
RequirementStatus status = Requirement::convertStatus(query.value(3).toString());
QString type = query.value(4).toString();
QString priority = query.value(5).toString();
QString project_id = query.value(6).toString();
QString created_at = query.value(7).toString();
QString updated_at = query.value(8).toString();
QString created_by_id = query.value(9).toString();
QString updated_by_id = query.value(10).toString();
QString parent_requirement_id = query.value(11).toString();

Requirement project(id, name, description, ownerId, createdAt, updatedAt);
list.push_front(project);
Requirement requirement(id, definition, especification, type, status, priority, project_id,
created_at, updated_at, created_by_id, updated_by_id, parent_requirement_id);
list.push_front(requirement);
}
return list;
}

Requirement* RequirementsRepository::getById(QString id) {
QSqlQuery query;

query.prepare("SELECT id, name, description, owner_id, created_at, updated_at FROM projects WHERE id = :id");
query.prepare("SELECT id, definition, especification, status, type, "
"priority, project_id, created_at, updated_at, created_by_id, "
"updated_by_id, parent_requirement_id FROM requirements WHERE id = :id");
query.bindValue(":id", id);
query.exec();

if(query.next()) {
QString id = query.value(0).toString();
QString definition = query.value(1).toString();
QString especification = query.value(2).toString();
RequirementStatus status = Requirement::convertStatus(query.value(3).toString());
QString type = query.value(4).toString();
QString priority = query.value(5).toString();
QString project_id = query.value(6).toString();
QString created_at = query.value(7).toString();
QString updated_at = query.value(8).toString();
QString created_by_id = query.value(9).toString();
QString updated_by_id = query.value(10).toString();
QString parent_requirement_id = query.value(11).toString();

Requirement* requirement = new Requirement(id, definition, especification, type, status, priority, project_id,
created_at, updated_at, created_by_id, updated_by_id, parent_requirement_id);
return requirement;
} else {
return nullptr;
}
}

Requirement* RequirementsRepository::getByIdAndProjectId(QString id, QString projectId) {
QSqlQuery query;

query.prepare("SELECT id, definition, especification, status, type, "
"priority, project_id, created_at, updated_at, created_by_id, "
"updated_by_id, parent_requirement_id FROM requirements WHERE id = :id"
" AND project_id = :projectId");
query.bindValue(":id", id);
query.bindValue(":projectId", projectId);
query.exec();

if(query.next()) {
QString id = query.value(0).toString();
QString name = query.value(1).toString();
QString description = query.value(2).toString();
QString ownerId = query.value(3).toString();
QString createdAt = query.value(4).toString();
QString updatedAt = query.value(5).toString();

Requirement* project = new Requirement(id, name, description, ownerId, createdAt, updatedAt);
return project;
QString definition = query.value(1).toString();
QString especification = query.value(2).toString();
RequirementStatus status = Requirement::convertStatus(query.value(3).toString());
QString type = query.value(4).toString();
QString priority = query.value(5).toString();
QString project_id = query.value(6).toString();
QString created_at = query.value(7).toString();
QString updated_at = query.value(8).toString();
QString created_by_id = query.value(9).toString();
QString updated_by_id = query.value(10).toString();
QString parent_requirement_id = query.value(11).toString();

Requirement* requirement = new Requirement(id, definition, especification, type, status, priority, project_id,
created_at, updated_at, created_by_id, updated_by_id, parent_requirement_id);
return requirement;
} else {
return nullptr;
}
}


Requirement* RequirementsRepository::create(Requirement entity) {
QSqlQuery query;

query.prepare("INSERT INTO requirements(id, definition, especification, status, type, priority, project_id, created_by_id, parent_requirement_id)"
" VALUES (:id, :definition, :especification, :status, :type, :priority, :project_id, :created_by_id, :parent_requirement_id)");
query.bindValue(":id", entity.getId().toInt());
query.bindValue(":definition", entity.getDefinition());
query.bindValue(":especification", entity.getEspecification());
query.bindValue(":status", entity.getStatus());
query.bindValue(":type", entity.getType());
query.bindValue(":priority", entity.getPriority());
query.bindValue(":project_id", entity.getProjectId().toInt());
query.bindValue(":created_by_id", entity.getCreatedBy().toInt());
query.bindValue(":parent_requirement_id", entity.getParentRequirementId().toInt());
auto ok = query.exec();

if(!ok) {
return nullptr;
}

QString id = entity.getId();
QString projectId = entity.getProjectId();

Requirement* newRequirement = this->getByIdAndProjectId(id, projectId);

return newRequirement;
}

std::list<Requirement> RequirementsRepository::getParentRequirements(QString projectId) {
QSqlQuery query;

query.prepare("SELECT id, definition, especification, status, type, "
"priority, project_id, created_at, updated_at, created_by_id, "
"updated_by_id, parent_requirement_id FROM requirements WHERE project_id = :projectId "
"AND parent_requirement_id = 0");
query.bindValue(":projectId", projectId.toInt());
query.exec();

std::list<Requirement> list;
while (query.next())
{
QString id = query.value(0).toString();
QString definition = query.value(1).toString();
QString especification = query.value(2).toString();
RequirementStatus status = Requirement::convertStatus(query.value(3).toString());
QString type = query.value(4).toString();
QString priority = query.value(5).toString();
QString project_id = query.value(6).toString();
QString created_at = query.value(7).toString();
QString updated_at = query.value(8).toString();
QString created_by_id = query.value(9).toString();
QString updated_by_id = query.value(10).toString();
QString parent_requirement_id = query.value(11).toString();

Requirement requirement(id, definition, especification, type, status, priority, project_id,
created_at, updated_at, created_by_id, updated_by_id, parent_requirement_id);
list.push_front(requirement);
}
return list;
}


std::list<Requirement> RequirementsRepository::getSubRequirements(QString id, QString projectId) {
QSqlQuery query;

query.prepare("SELECT id, definition, especification, status, type, "
"priority, project_id, created_at, updated_at, created_by_id, "
"updated_by_id, parent_requirement_id FROM requirements WHERE parent_requirement_id = :parent_requirement_id"
" AND project_id = :projectId");
query.bindValue(":parent_requirement_id", id);
query.bindValue(":projectId", projectId);
query.exec();

std::list<Requirement> list;
while (query.next())
{
QString id = query.value(0).toString();
QString definition = query.value(1).toString();
QString especification = query.value(2).toString();
RequirementStatus status = Requirement::convertStatus(query.value(3).toString());
QString type = query.value(4).toString();
QString priority = query.value(5).toString();
QString project_id = query.value(6).toString();
QString created_at = query.value(7).toString();
QString updated_at = query.value(8).toString();
QString created_by_id = query.value(9).toString();
QString updated_by_id = query.value(10).toString();
QString parent_requirement_id = query.value(11).toString();

Requirement requirement(id, definition, especification, type, status, priority, project_id,
created_at, updated_at, created_by_id, updated_by_id, parent_requirement_id);
list.push_front(requirement);
}
return list;
}


Requirement* RequirementsRepository::update(Requirement entity) {
return nullptr;
}

Requirement* RequirementsRepository::remove(QString id) {
return nullptr;
QSqlQuery query;

query.prepare("DELETE FROM requirements WHERE id project_id = :projectId");
query.bindValue(":projectId", id);
query.exec();

auto ok = query.exec();

if(!ok) {
return nullptr;
}

return new Requirement();
}

Requirement* RequirementsRepository::removeWithIdAndProjectId(QString id, QString projectId) {
QSqlQuery query;

query.prepare("DELETE FROM requirements WHERE id = :id AND project_id = :projectId");
query.bindValue(":id", id);
query.bindValue(":projectId", projectId);
query.exec();

auto ok = query.exec();

if(!ok) {
return nullptr;
}

return new Requirement();
}

7 changes: 6 additions & 1 deletion src/app/database/repositories/requirementsrepository.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,23 @@
#include "irepository.h"
#include "models/requirement.h"

class RequirementsRepository : public QObject, public IRepository<Requirement, QString>
class RequirementsRepository final : public QObject, public IRepository<Requirement, QString>
{
Q_OBJECT
public:
explicit RequirementsRepository(DBManager* dbmanager, QObject* parent = nullptr);
~RequirementsRepository() override { delete m_dbmanager; }

std::list<Requirement> getAll() override;
std::list<Requirement> getByProjectId(QString projectId);
Requirement* getByIdAndProjectId(QString id, QString projectId);
std::list<Requirement> getParentRequirements(QString projectId);
std::list<Requirement> getSubRequirements(QString id, QString projectId);
Requirement* getById(QString id) override;
Requirement* create(Requirement entity) override;
Requirement* update(Requirement entity) override;
Requirement* remove(QString id) override;
Requirement* removeWithIdAndProjectId(QString id, QString projectId);
};

#endif // REQUIREMENTSREPOSITORY_H
Binary file added src/app/images/logo-cc.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/app/images/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src/app/main.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
#include "views/mainwindow.h"
#include "views/login.h"
#include <QApplication>
#include <QFile>
Expand All @@ -21,6 +20,7 @@ int main(int argc, char *argv[])

iis->registerSingleton<UsersRepository>(new UsersRepository(dbmanager));
iis->registerSingleton<ProjectsRepository>(new ProjectsRepository(dbmanager));
iis->registerSingleton<RequirementsRepository>(new RequirementsRepository(dbmanager));
iis->registerSingleton<InvitationsRepository>(new InvitationsRepository(dbmanager));

QString stylesheet = QLatin1String(stylesheet_file.readAll());
Expand Down
Loading

0 comments on commit 97beae8

Please sign in to comment.