Skip to content
This repository has been archived by the owner on Jan 2, 2024. It is now read-only.

Add the feature to save new users in database #99

Merged
merged 1 commit into from Jan 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Expand Up @@ -33,5 +33,4 @@ build/
### Mac ###
.DS_Store

application.properties
application.yml
2 changes: 1 addition & 1 deletion app/pom.xml
Expand Up @@ -11,7 +11,7 @@
</parent>

<artifactId>app</artifactId>
<packaging>war</packaging>
<packaging>jar</packaging>

<dependencies>
<dependency>
Expand Down
11 changes: 0 additions & 11 deletions app/src/main/java/org/sefglobal/scholarx/model/Profile.java
Expand Up @@ -33,9 +33,6 @@ public class Profile extends BaseScholarxModel {
@Column
private String imageUrl;

@Column(nullable = false)
private String linkedinUrl;

@Column(length = 50)
private String headline;

Expand Down Expand Up @@ -87,14 +84,6 @@ public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}

public String getLinkedinUrl() {
return linkedinUrl;
}

public void setLinkedinUrl(String linkedinUrl) {
this.linkedinUrl = linkedinUrl;
}

public String getHeadline() {
return headline;
}
Expand Down
10 changes: 0 additions & 10 deletions app/src/main/resources/application.properties.example

This file was deleted.

16 changes: 16 additions & 0 deletions app/src/main/resources/application.yml.example
@@ -0,0 +1,16 @@
spring:
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
hibernate:
ddl-auto: update
datasource:
url: jdbc:mysql://127.0.0.1:3306/${DB_NAME}?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username: ${USERNAME}
password: ${PASSWORD}
jmx:
unique-names: true
server:
error:
include-message: always
2 changes: 1 addition & 1 deletion auth-server/pom.xml
Expand Up @@ -11,7 +11,7 @@
</parent>

<artifactId>auth-server</artifactId>
<packaging>war</packaging>
<packaging>jar</packaging>

<dependencies>
<dependency>
Expand Down
@@ -0,0 +1,17 @@
package org.sefglobal.scholarx.controller;

import org.springframework.http.HttpStatus;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AuthUserController {

@GetMapping("/me")
@ResponseStatus(HttpStatus.OK)
public Object getLoggedUser(Authentication authentication) {
return authentication.getPrincipal();
}
}
@@ -0,0 +1,17 @@
package org.sefglobal.scholarx.exception;

import org.springframework.http.HttpStatus;
import org.springframework.security.core.AuthenticationException;
import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public class OAuth2AuthenticationProcessingException extends AuthenticationException {

public OAuth2AuthenticationProcessingException(String msg) {
super(msg);
}

public OAuth2AuthenticationProcessingException(String msg, Throwable e) {
super(msg, e);
}
}
@@ -0,0 +1,17 @@
package org.sefglobal.scholarx.exception;

import org.springframework.http.HttpStatus;
import org.springframework.security.core.AuthenticationException;
import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public class UserAlreadyExistsAuthenticationException extends AuthenticationException {

public UserAlreadyExistsAuthenticationException(String msg) {
super(msg);
}

public UserAlreadyExistsAuthenticationException(String msg, Throwable e) {
super(msg, e);
}
}
@@ -0,0 +1,62 @@
package org.sefglobal.scholarx.model;

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.Column;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import java.io.Serializable;
import java.util.Date;

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseScholarxModel implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "createdAt",
nullable = false,
updatable = false)
@CreatedDate
private Date createdAt;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "updatedAt",
nullable = false)
@LastModifiedDate
private Date updatedAt;

public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}

public Date getCreatedAt() {
return createdAt;
}

public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}

public Date getUpdatedAt() {
return updatedAt;
}

public void setUpdatedAt(Date updatedAt) {
this.updatedAt = updatedAt;
}
}
@@ -0,0 +1,51 @@
package org.sefglobal.scholarx.model;

import org.sefglobal.scholarx.util.EnrolmentState;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.ManyToOne;

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class EnrolledUser extends BaseScholarxModel {

@ManyToOne(optional = false)
private Profile profile;

@Enumerated(EnumType.STRING)
@Column(length = 10,
nullable = false)
private EnrolmentState state;

@ManyToOne(optional = false)
private Program program;

public Profile getProfile() {
return profile;
}

public void setProfile(Profile profile) {
this.profile = profile;
}

public EnrolmentState getState() {
return state;
}

public void setState(EnrolmentState state) {
this.state = state;
}

public Program getProgram() {
return program;
}

public void setProgram(Program program) {
this.program = program;
}
}
129 changes: 129 additions & 0 deletions auth-server/src/main/java/org/sefglobal/scholarx/model/Profile.java
@@ -0,0 +1,129 @@
package org.sefglobal.scholarx.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.sefglobal.scholarx.util.ProfileType;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.oauth2.core.user.OAuth2User;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;

@Entity
@Table(name = "profile")
@JsonIgnoreProperties({"createdAt", "updatedAt", "enrolledUsers"})
public class Profile extends BaseScholarxModel implements OAuth2User {

@Column(length = 36,
nullable = false)
private String uid;

@Column(nullable = false)
private String email;

@Column
private String firstName;

@Column
private String lastName;

@Column
private String imageUrl;

@Column(length = 50)
private String headline;

@Enumerated(EnumType.STRING)
@Column(length = 10,
nullable = false)
private ProfileType type;

@OneToMany(mappedBy = "profile")
private List<EnrolledUser> enrolledUsers = new ArrayList<>();

public String getUid() {
return uid;
}

public void setUid(String uid) {
this.uid = uid;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public String getImageUrl() {
return imageUrl;
}

public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}

public String getHeadline() {
return headline;
}

public void setHeadline(String headline) {
this.headline = headline;
}

public ProfileType getType() {
return type;
}

public void setType(ProfileType type) {
this.type = type;
}

public List<EnrolledUser> getEnrolledUsers() {
return enrolledUsers;
}

public void setEnrolledUsers(List<EnrolledUser> enrolledUsers) {
this.enrolledUsers = enrolledUsers;
}

@Override
public Map<String, Object> getAttributes() {
return null;
}

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return null;
}

@Override
public String getName() {
return getFirstName().concat(getLastName());
}
}