██████ ▓█████ ▄████▄ █ ██ ██████ ▄▄▄█████▓ ███▄ ▄███▓ ▄▄▄ ███▄ █
▒██ ▒ ▓█ ▀ ▒██▀ ▀█ ██ ▓██▒▒██ ▒ ▓ ██▒ ▓▒▓██▒▀█▀ ██▒▒████▄ ██ ▀█ █
░ ▓██▄ ▒███ ▒▓█ ▄ ▓██ ▒██░░ ▓██▄ ▒ ▓██░ ▒░▓██ ▓██░▒██ ▀█▄ ▓██ ▀█ ██▒
▒ ██▒▒▓█ ▄ ▒▓▓▄ ▄██▒▓▓█ ░██░ ▒ ██▒░ ▓██▓ ░ ▒██ ▒██ ░██▄▄▄▄██ ▓██▒ ▐▌██▒
▒██████▒▒░▒████▒▒ ▓███▀ ░▒▒█████▓ ▒██████▒▒ ▒██▒ ░ ▒██▒ ░██▒ ▓█ ▓██▒▒██░ ▓██░
▒ ▒▓▒ ▒ ░░░ ▒░ ░░ ░▒ ▒ ░░▒▓▒ ▒ ▒ ▒ ▒▓▒ ▒ ░ ▒ ░░ ░ ▒░ ░ ░ ▒▒ ▓▒█░░ ▒░ ▒ ▒
░ ░▒ ░ ░ ░ ░ ░ ░ ▒ ░░▒░ ░ ░ ░ ░▒ ░ ░ ░ ░ ░ ░ ▒ ▒▒ ░░ ░░ ░ ▒░
░ ░ ░ ░ ░ ░░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░
░ ░ ░░ ░ ░ ░ ░ ░ ░ ░
░
For more detailed information about the project, please refer to the Wiki Page
The ongoing project at HTWG University in the field of Software Engineering focuses on the agile development of a Customer Relationship Management (CRM) system. The project aims to design a well-thought-out software architecture. The CRM system assists businesses in managing customer relationships and includes features such as contact management, sales activities, and marketing initiatives. By utilizing agile methodologies like Scrum or Kanban and leveraging modern technologies, the project aims to create a flexible, scalable, and maintainable solution. The project team collaborates closely with stakeholders and users to gather continuous feedback and make adjustments to the CRM system according to requirements and quality standards.
In addition to the dependencies mentioned earlier, the project also utilized the following technologies:
-
Scala: The primary programming language used in the project. Scala is a statically typed, functional and object-oriented language that runs on the Java Virtual Machine (JVM). It provides powerful language features and interoperability with Java.
-
sbt: The build tool used in the project. sbt (Scala Build Tool) is a popular build tool for Scala projects. It provides dependency management, compilation, testing, packaging, and deployment capabilities.
-
PostgreSQL: The chosen database management system for the project. PostgreSQL is a powerful, open-source relational database that provides robustness, scalability, and SQL support.
-
JSON: JSON (JavaScript Object Notation) was used for data interchange in the project. It is a lightweight data format that is easy to read and write for humans, and it is widely supported by various programming languages and frameworks.
-
Docker: Docker was used for containerization and deployment purposes. Docker enables the creation and management of lightweight, isolated containers that encapsulate an application and its dependencies, providing a consistent and reproducible environment across different systems.
These technologies were selected to leverage their capabilities and benefits in terms of scalability, productivity, data management, interoperability, and containerization.
Summary of Dependencies Used:
- ScalaFX: "org.scalafx" % "scalafx_2.13" % "20.0.0-R31" - Scala library for creating JavaFX applications.
- PostgreSQL: "org.postgresql" % "postgresql" % "42.6.0" - PostgreSQL JDBC driver for connecting to a PostgreSQL database.
- Google Guice: "com.google.inject" % "guice" % "7.0.0" - Dependency injection framework for Java.
- Scala Guice: "net.codingwell" %% "scala-guice" % "7.0.0" - Integration library for using Guice with Scala.
- Scala XML: "org.scala-lang.modules" %% "scala-xml" % "2.1.0" - Scala library for working with XML.
- ScalaTest: "org.scalatest" %% "scalatest" % "3.2.15" % "test" - Scala testing framework.
- Circe (JSON library): "io.circe" %% "circe-core", "io.circe" %% "circe-generic", "io.circe" %% "circe-parser" - JSON parsing and encoding library for Scala.
- Java-Dotenv: "io.github.cdimascio" % "java-dotenv" % "5.2.2" - Java library for loading environment variables from a .env file.
- Mockito: "org.mockito" % "mockito-core" % "5.4.0" % Test - Mocking framework for testing in Java.
- ScalaTestPlus Mockito: "org.scalatestplus" %% "mockito-3-4" % "3.2.10.0" % Test - Integration between ScalaTest and Mockito for testing.
These dependencies were used in the project to provide functionality and support for various aspects of the software development process, such as user interface development, database connectivity, dependency injection, JSON handling, testing, and more.
- Factory
- CustomerHandler -> create Insert, Update, Delete, ...
- Handlers -> createChain
- AccountService, AddressService, HistoryService, ProjectService, CustomerService ->
def getInstance(apiType: String)
- Chain of Responsibility
- Handlers (trait)
- AddressHandler
- AuthHandlers
- CustomerHandler
- Proxy
- AccountService
- AddressService
- CustomerService
- HistoryService
- ProjectService
- Builder
- AccountBuilder
- Builder (trait)
- CustomerBuilder
- SqlBuilder (WIP)
git clone https://github.com/moglerdev/se-cust-man.git
sbt bloopInstall
docker compose --build
Once the application is up and running, you can use it to manage and analyze your customer interactions.
docker compose up -d "db"
docker compose up "cli"
sbt run [--gui]
prompt> customer ls
prompt> customer help
prompt> customer set [-i id] -n <name> -e <email> -p <phone number> -a <address>
prompt> customer rm [ids ...]
prompt> customer open [id]
prompt> project ls
prompt> project help
prompt> project set [-i <id:int>] -t <title:string> -d <description:string>
prompt> project rm <ids ...>
prompt> project open <id:int>
prompt> task ls
prompt> task help
prompt> task set [-i <id:int>] -t <title:string> -d <description:string>
prompt> task rm <ids ...>
Copyright (c) 2023 Christopher Jaeger and Dennis Schulze
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.