Initial backend

This commit is contained in:
Gnarwhal 2021-01-27 03:27:04 -05:00
parent f10ca87343
commit a06a558d7b
Signed by: Gnarwhal
GPG key ID: 0989A73D8C421174
19 changed files with 303 additions and 0 deletions

21
backend/.gitignore vendored Normal file
View file

@ -0,0 +1,21 @@
# Intellij project files
.idea/
# Build files
build/
# Gradle files
.gradle/
gradle/
gradlew
gradlew.bat
# Eclipse project files
.classpath
.project
.settings/
# Local property file
src/main/resources/application-db.properties

24
backend/build.gradle Normal file
View file

@ -0,0 +1,24 @@
plugins {
id 'org.springframework.boot' version '2.3.3.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group = 'edu.rh.achievements'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.15
targetCompatibility = 1.15
repositories {
mavenCentral()
}
dependencies {
compile 'org.springframework.boot:spring-boot-starter-web'
compile 'com.microsoft.sqlserver:mssql-jdbc'
}
tasks.getByName('bootRun') {
systemProperty 'spring.profiles.active', 'db'
}

View file

@ -0,0 +1,19 @@
package achievements;
import achievements.services.DbConnectionService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
var context = SpringApplication.run(Application.class, args);
// Verify the database connection succeeded
var db = context.getBean(DbConnectionService.class);
if (db.getConnection() == null) {
SpringApplication.exit(context, () -> 0);
}
}
}

View file

@ -0,0 +1,37 @@
package achievements.controllers;
import achievements.data.InternalError;
import achievements.services.DbService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
@RestController
public class Controller {
@Autowired
private DbService db;
public Controller() {}
@RequestMapping(value = "/achievements", method = GET, produces = "application/json")
public ResponseEntity index() {
try {
var achievements = db.getAchievements();
var mapper = new ObjectMapper();
if (achievements == null) {
return new ResponseEntity(mapper.writeValueAsString(new InternalError("Could not get achievements from database")), HttpStatus.INTERNAL_SERVER_ERROR);
} else {
return new ResponseEntity(mapper.writeValueAsString(achievements), HttpStatus.OK);
}
} catch (JsonProcessingException e) {
e.printStackTrace();
return new ResponseEntity("{}", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}

View file

@ -0,0 +1,75 @@
package achievements.data;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
import java.util.List;
public class Achievements {
public static class Achievement {
@JsonProperty("GameID")
private int gameID;
@JsonProperty("Name")
private String name;
@JsonProperty("Description")
private String description;
@JsonProperty("Stages")
private int stages;
public Achievement(int gameID, String name, String description, int stages) {
this.gameID = gameID;
this.name = name;
this.description = description;
this.stages = stages;
}
public int getGameID() {
return gameID;
}
public void setGameID(int gameID) {
this.gameID = gameID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getStages() {
return stages;
}
public void setStages(int stages) {
this.stages = stages;
}
}
@JsonProperty("achievements")
List<Achievement> achievements;
public Achievements() {
achievements = new ArrayList<Achievement>();
}
public List<Achievement> getAchievements() {
return achievements;
}
public void setAchievements(List<Achievement> achievements) {
this.achievements = achievements;
}
}

View file

@ -0,0 +1,21 @@
package achievements.data;
import com.fasterxml.jackson.annotation.JsonProperty;
public class InternalError {
@JsonProperty
private String message;
public InternalError(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

View file

@ -0,0 +1,57 @@
package achievements.services;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
@Component
public class DbConnectionService {
private Connection connection;
@Value("${database.server}")
private String serverName;
@Value("${database.name}")
private String databaseName;
@Value("${database.user.name}")
private String username;
@Value("${database.user.password}")
private String password;
public DbConnectionService() {}
@PostConstruct
public void connect() {
try {
var dataSource = new SQLServerDataSource();
dataSource.setServerName (serverName );
dataSource.setDatabaseName(databaseName);
dataSource.setUser (username );
dataSource.setPassword (password );
connection = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
public Connection getConnection() {
return this.connection;
}
@PreDestroy
public void disconnect() {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

View file

@ -0,0 +1,47 @@
package achievements.services;
import achievements.data.Achievements;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.sql.Connection;
import java.sql.SQLException;
@Service
public class DbService {
@Autowired
private DbConnectionService dbs;
private Connection db;
@PostConstruct
private void init() {
db = dbs.getConnection();
}
public Achievements getAchievements() {
final String QUERY = "SELECT * FROM [dbo].[Achievement]";
try {
var statement = db.createStatement();
var achievements = new Achievements();
var queryResults = statement.executeQuery(QUERY);
while (queryResults.next()) {
achievements.getAchievements().add(new Achievements.Achievement(
queryResults.getInt("GameID"),
queryResults.getString("Name"),
queryResults.getString("Description"),
queryResults.getInt("Stages")
));
}
statement.close();
return achievements;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
}

View file

@ -0,0 +1,2 @@
server.port = 8000
spring.application.name = Achievements Project

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

View file

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 91 KiB

View file

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 113 KiB

View file

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 88 KiB

View file

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 79 KiB

View file

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View file

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 135 KiB