diff --git a/src/main/java/org/springframework/cheapy/model/Authorities.java b/src/main/java/org/springframework/cheapy/model/Authorities.java new file mode 100644 index 000000000..9631cc8c3 --- /dev/null +++ b/src/main/java/org/springframework/cheapy/model/Authorities.java @@ -0,0 +1,24 @@ +package org.springframework.cheapy.model; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "authorities") +public class Authorities { + + @Id + String username; + + String authority; + + public String getAuthority() { + return authority; + } + + public void setAuthority(String authority) { + this.authority = authority; + } + +} diff --git a/src/main/java/org/springframework/cheapy/model/Client.java b/src/main/java/org/springframework/cheapy/model/Client.java new file mode 100644 index 000000000..06268c32a --- /dev/null +++ b/src/main/java/org/springframework/cheapy/model/Client.java @@ -0,0 +1,94 @@ +package org.springframework.cheapy.model; + +import java.util.Set; + +import javax.persistence.Entity; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.validation.constraints.Digits; +import javax.validation.constraints.NotEmpty; + +@Entity +@Table(name = "clients") +public class Client extends User { + + @NotEmpty + private String address; + + @NotEmpty + private String timetable; + + @NotEmpty + @Digits(fraction = 0, integer = 10) + private String telephone; + + @NotEmpty + private String description; + + @NotEmpty + private String code; + + @NotEmpty + private String food; + + @OneToMany + private Set foodOffers; + + @OneToMany + private Set nuOffers; + + @OneToMany + private Set speedOffers; + + @OneToMany + private Set timeOffers; + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getTimetable() { + return timetable; + } + + public void setTimetable(String timetable) { + this.timetable = timetable; + } + + public String getTelephone() { + return telephone; + } + + public void setTelephone(String telephone) { + this.telephone = telephone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getFood() { + return food; + } + + public void setFood(String food) { + this.food = food; + } + +} \ No newline at end of file diff --git a/src/main/java/org/springframework/cheapy/model/FoodOffer.java b/src/main/java/org/springframework/cheapy/model/FoodOffer.java new file mode 100644 index 000000000..b82fed73b --- /dev/null +++ b/src/main/java/org/springframework/cheapy/model/FoodOffer.java @@ -0,0 +1,59 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cheapy.model; + +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; + +@Entity +@Table(name = "food_offers") +public class FoodOffer extends Offer { + + @NotBlank + private String food; + + @NotBlank + private String discount; + + @NotBlank + private Integer units; // revisar + + public String getFood() { + return food; + } + + public void setFood(String food) { + this.food = food; + } + + public String getDiscount() { + return discount; + } + + public void setDiscount(String discount) { + this.discount = discount; + } + + public Integer getUnits() { + return units; + } + + public void setUnits(Integer units) { + this.units = units; + } + +} \ No newline at end of file diff --git a/src/main/java/org/springframework/cheapy/model/NuOffer.java b/src/main/java/org/springframework/cheapy/model/NuOffer.java new file mode 100644 index 000000000..05d66a688 --- /dev/null +++ b/src/main/java/org/springframework/cheapy/model/NuOffer.java @@ -0,0 +1,96 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cheapy.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; + +@Entity +@Table(name = "nu_offers") +public class NuOffer extends Offer { + + @NotBlank + private Integer gold; + + @Column(name = "discount_gold") + @NotBlank + private String discountGold; + + @NotBlank + private Integer silver; + + @Column(name = "discount_silver") + @NotBlank + private String discountSilver; + + @NotBlank + private Integer bronze; + + @Column(name = "discount_bronze") + @NotBlank + private String discountBronze; + + public Integer getGold() { + return gold; + } + + public void setGold(Integer gold) { + this.gold = gold; + } + + public String getDiscountGold() { + return discountGold; + } + + public void setDiscountGold(String discountGold) { + this.discountGold = discountGold; + } + + public Integer getSilver() { + return silver; + } + + public void setSilver(Integer silver) { + this.silver = silver; + } + + public String getDiscountSilver() { + return discountSilver; + } + + public void setDiscountSilver(String discountSilver) { + this.discountSilver = discountSilver; + } + + public Integer getBronze() { + return bronze; + } + + public void setBronze(Integer bronze) { + this.bronze = bronze; + } + + public String getDiscountBronze() { + return discountBronze; + } + + public void setDiscountBronze(String discountBronze) { + this.discountBronze = discountBronze; + } + +} \ No newline at end of file diff --git a/src/main/java/org/springframework/cheapy/model/Offer.java b/src/main/java/org/springframework/cheapy/model/Offer.java new file mode 100644 index 000000000..4c3921b1b --- /dev/null +++ b/src/main/java/org/springframework/cheapy/model/Offer.java @@ -0,0 +1,87 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cheapy.model; + +import java.time.LocalDateTime; + +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.MappedSuperclass; +import javax.persistence.Table; +import javax.validation.constraints.Future; +import javax.validation.constraints.NotBlank; + +import org.springframework.format.annotation.DateTimeFormat; + +@MappedSuperclass +public class Offer extends BaseEntity { + + @DateTimeFormat(pattern = "dd/MM/yyyy HH:mm") + @NotBlank + @Future + private LocalDateTime start; + + @DateTimeFormat(pattern = "dd/MM/yyyy HH:mm") + @NotBlank + @Future + private LocalDateTime end; + + @NotBlank + private String code; + + @Enumerated(value = EnumType.STRING) + private StatusOffer type; + + @ManyToOne + @JoinColumn(name="client_id") + private Client client; + + public LocalDateTime getStart() { + return start; + } + + public void setStart(LocalDateTime start) { + this.start = start; + } + + public LocalDateTime getEnd() { + return end; + } + + public void setEnd(LocalDateTime end) { + this.end = end; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public StatusOffer getType() { + return type; + } + + public void setType(StatusOffer type) { + this.type = type; + } + +} diff --git a/src/main/java/org/springframework/cheapy/model/SpeedOffer.java b/src/main/java/org/springframework/cheapy/model/SpeedOffer.java new file mode 100644 index 000000000..0399d4baf --- /dev/null +++ b/src/main/java/org/springframework/cheapy/model/SpeedOffer.java @@ -0,0 +1,96 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cheapy.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; + +@Entity +@Table(name = "speed_offers") +public class SpeedOffer extends Offer { + + @NotBlank + private Integer gold; // x minutos + + @Column(name = "discount_gold") + @NotBlank + private String discountGold; + + @NotBlank + private Integer silver; + + @Column(name = "discount_silver") + @NotBlank + private String discountSilver; + + @NotBlank + private Integer bronze; + + @Column(name = "discount_bronze") + @NotBlank + private String discountBronze; + + public Integer getGold() { + return gold; + } + + public void setGold(Integer gold) { + this.gold = gold; + } + + public String getDiscountGold() { + return discountGold; + } + + public void setDiscountGold(String discountGold) { + this.discountGold = discountGold; + } + + public Integer getSilver() { + return silver; + } + + public void setSilver(Integer silver) { + this.silver = silver; + } + + public String getDiscountSilver() { + return discountSilver; + } + + public void setDiscountSilver(String discountSilver) { + this.discountSilver = discountSilver; + } + + public Integer getBronze() { + return bronze; + } + + public void setBronze(Integer bronze) { + this.bronze = bronze; + } + + public String getDiscountBronze() { + return discountBronze; + } + + public void setDiscountBronze(String discountBronze) { + this.discountBronze = discountBronze; + } + +} \ No newline at end of file diff --git a/src/main/java/org/springframework/cheapy/model/StatusOffer.java b/src/main/java/org/springframework/cheapy/model/StatusOffer.java new file mode 100644 index 000000000..b1b0f874b --- /dev/null +++ b/src/main/java/org/springframework/cheapy/model/StatusOffer.java @@ -0,0 +1,5 @@ +package org.springframework.cheapy.model; + +public enum StatusOffer { + active, inactive, hidden +} diff --git a/src/main/java/org/springframework/cheapy/model/TimeOffer.java b/src/main/java/org/springframework/cheapy/model/TimeOffer.java new file mode 100644 index 000000000..7f1d3cc6d --- /dev/null +++ b/src/main/java/org/springframework/cheapy/model/TimeOffer.java @@ -0,0 +1,53 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cheapy.model; + +import java.time.LocalDateTime; +import java.time.LocalTime; + +import javax.persistence.Entity; +import javax.persistence.Table; +import javax.validation.constraints.Future; +import javax.validation.constraints.NotBlank; + +import org.springframework.format.annotation.DateTimeFormat; + +@Entity +@Table(name = "time_offers") +public class TimeOffer extends Offer { + + @DateTimeFormat(pattern = "HH:mm") + @NotBlank + private LocalTime init; + + @DateTimeFormat(pattern = "HH:mm") + @NotBlank + private LocalTime finish; + + @NotBlank + private String discount; + + + + public String getDiscount() { + return discount; + } + + public void setDiscount(String discount) { + this.discount = discount; + } + +} \ No newline at end of file diff --git a/src/main/java/org/springframework/cheapy/model/User.java b/src/main/java/org/springframework/cheapy/model/User.java new file mode 100644 index 000000000..9420b0deb --- /dev/null +++ b/src/main/java/org/springframework/cheapy/model/User.java @@ -0,0 +1,58 @@ +package org.springframework.cheapy.model; + +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import javax.persistence.OneToOne; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; + + +@MappedSuperclass +public class User extends BaseEntity { + + @NotBlank + String username; + + @NotBlank + String password; + + @Email + @NotBlank + String email; + + @OneToOne + Authorities authority; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Authorities getAuthority() { + return authority; + } + + public void setAuthority(Authorities authority) { + this.authority = authority; + } + +} diff --git a/src/main/resources/application-mysql.properties b/src/main/resources/application-mysql.properties index 919a0c3aa..ccc6807c3 100644 --- a/src/main/resources/application-mysql.properties +++ b/src/main/resources/application-mysql.properties @@ -5,3 +5,10 @@ spring.datasource.username=${MYSQL_USER:cheapy} spring.datasource.password=${MYSQL_PASS:cheapy} # SQL is written to be idempotent so this is safe spring.datasource.initialization-mode=always + +spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy +spring.jpa.properties.javax.persistence.schema-generation.drop-source=metadata +# Naming strategy +spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy +# Allows Hibernate to generate SQL optimized for a particular DBMS +spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index fbbc46ce3..c93d5eac7 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,23 +1,30 @@ # database init, supports mysql too -database=h2 -spring.datasource.schema=classpath*:db/${database}/schema.sql -spring.datasource.data=classpath*:db/${database}/data.sql - +database=mysql +#spring.datasource.schema=classpath*:db/${database}/schema.sql +spring.datasource.data=classpath*:db/${database}/data.sql +spring.h2.console.enabled=true +spring.profiles.active=mysql # Web spring.thymeleaf.mode=HTML # JPA -spring.jpa.hibernate.ddl-auto=none -spring.jpa.open-in-view=false +spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.show-sql=true +spring.jpa.properties.hibernate.format_sql=true +spring.jpa.properties.javax.persistence.schema-generation.drop-source=script +spring.jpa.properties.javax.persistence.schema-generation.drop-script-source=drop-tables.sql # Internationalization spring.messages.basename=messages/messages + # Views spring.mvc.view.prefix: /WEB-INF/jsp/ spring.mvc.view.suffix: .jsp -# Actuator + +# Actuator / Management +management.endpoints.web.base-path=/manage management.endpoints.web.exposure.include=* # Logging @@ -26,6 +33,4 @@ logging.level.org.springframework=INFO # logging.level.org.springframework.context.annotation=TRACE # Maximum time static resources should be cached -spring.resources.cache.cachecontrol.max-age=12h - -spring.profiles.active=mysql +spring.resources.cache.cachecontrol.max-age=12h \ No newline at end of file diff --git a/src/main/resources/db/mysql/data.sql b/src/main/resources/db/mysql/data.sql index ff7766e22..b7c6309f9 100644 --- a/src/main/resources/db/mysql/data.sql +++ b/src/main/resources/db/mysql/data.sql @@ -1,10 +1,15 @@ -INSERT IGNORE INTO owners VALUES (1, 'George', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023'); -INSERT IGNORE INTO owners VALUES (2, 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749'); -INSERT IGNORE INTO owners VALUES (3, 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763'); -INSERT IGNORE INTO owners VALUES (4, 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198'); -INSERT IGNORE INTO owners VALUES (5, 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765'); -INSERT IGNORE INTO owners VALUES (6, 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654'); -INSERT IGNORE INTO owners VALUES (7, 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387'); -INSERT IGNORE INTO owners VALUES (8, 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683'); -INSERT IGNORE INTO owners VALUES (9, 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435'); -INSERT IGNORE INTO owners VALUES (10, 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487'); +INSERT INTO owners VALUES (1, 'Javi', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023'); +INSERT INTO owners VALUES (2, 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749'); +INSERT INTO owners VALUES (3, 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763'); +INSERT INTO owners VALUES (4, 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198'); +INSERT INTO owners VALUES (5, 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765'); +INSERT INTO owners VALUES (6, 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654'); +INSERT INTO owners VALUES (7, 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387'); +INSERT INTO owners VALUES (8, 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683'); +INSERT INTO owners VALUES (9, 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435'); +INSERT INTO owners VALUES (10, 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487'); + + +INSERT INTO food_offers(start, end, code, type, client_id, food, discount, units) VALUES ('2021-06-15 12:00:00', '2021-06-16 12:00:00', 'jkhlljk', 'active', null, 'macarrones', '15%', 10); + +INSERT INTO time_offers(start, end, code, type, client_id, init, finish, discount) VALUES ('2021-06-15 12:00:00', '2021-06-16 12:00:00', 'jkhlljk', 'active', null, '12:00:00', '13:00:00', '10%'); \ No newline at end of file