Skip to content

Commit d6375e5

Browse files
committed
remove lengths from columns
1 parent f90c905 commit d6375e5

10 files changed

Lines changed: 114 additions & 116 deletions

File tree

src/main/java/com/github/sfxd/trust/core/instances/Instance.java

Lines changed: 31 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2,123 +2,107 @@
22
package com.github.sfxd.trust.core.instances;
33

44
import java.util.List;
5-
import java.util.Objects;
65

76
import javax.persistence.CascadeType;
87
import javax.persistence.Column;
9-
import javax.persistence.EnumType;
10-
import javax.persistence.Enumerated;
118
import javax.persistence.OneToMany;
129

13-
import com.fasterxml.jackson.annotation.JsonProperty;
1410
import com.github.sfxd.trust.core.Entity;
1511
import com.github.sfxd.trust.core.users.Subscription;
12+
import io.ebean.annotation.DbEnumType;
13+
import io.ebean.annotation.DbEnumValue;
1614
import org.apache.commons.lang3.builder.DiffBuilder;
1715
import org.apache.commons.lang3.builder.DiffResult;
1816
import org.apache.commons.lang3.builder.ToStringStyle;
1917

20-
/**
21-
* Represents an SFDC instance. Sandbox or Production.
22-
* This model maps directly to the model from the api.
23-
*/
18+
import static java.util.Objects.requireNonNull;
19+
20+
/// Represents an SFDC instance. Sandbox or Production.
2421
@javax.persistence.Entity
2522
public class Instance extends Entity {
26-
public static final String STATUS_OK = "OK";
27-
28-
@Column(unique = true, nullable = false, length = 255, name = "\"key\"")
29-
private String key;
23+
@Column(unique = true, nullable = false, name = "\"key\"", columnDefinition = "character varying")
24+
private final String key;
3025

31-
@Column(length = 255)
26+
@Column(columnDefinition = "character varying")
3227
private String location;
3328

34-
@Column(length = 255)
29+
@Column(columnDefinition = "character varying")
3530
private String releaseVersion;
3631

37-
@Column(length = 255)
32+
@Column(columnDefinition = "character varying")
3833
private String releaseNumber;
3934

40-
@Column(length = 255)
35+
@Column(columnDefinition = "character varying")
4136
private String status;
4237

43-
@Enumerated(EnumType.STRING)
44-
private Environment environment;
38+
@Column(nullable = false)
39+
private final Environment environment;
4540

4641
@OneToMany(mappedBy = "instance", cascade = CascadeType.REMOVE)
4742
private List<Subscription> subscriptions;
4843

49-
public Instance() {
50-
44+
public Instance(String key, Environment environment) {
45+
this.key = requireNonNull(key);
46+
this.environment = requireNonNull(environment);
5147
}
5248

5349
public String key() {
5450
return this.key;
5551
}
5652

57-
public Instance setKey(String key) {
58-
this.key = key;
59-
return this;
60-
}
61-
6253
public String location() {
6354
return this.location;
6455
}
6556

66-
public Instance setLocation(String location) {
57+
public void setLocation(String location) {
6758
this.location = location;
68-
return this;
6959
}
7060

7161
public String releaseVersion() {
7262
return this.releaseVersion;
7363
}
7464

75-
public Instance setReleaseVersion(String releaseVersion) {
65+
public void setReleaseVersion(String releaseVersion) {
7666
this.releaseVersion = releaseVersion;
77-
return this;
7867
}
7968

8069
public String releaseNumber() {
8170
return this.releaseNumber;
8271
}
8372

84-
public Instance setReleaseNumber(String releaseNumber) {
73+
public void setReleaseNumber(String releaseNumber) {
8574
this.releaseNumber = releaseNumber;
86-
return this;
8775
}
8876

8977
public String status() {
9078
return this.status;
9179
}
9280

93-
public Instance setStatus(String status) {
81+
public void setStatus(String status) {
9482
this.status = status;
95-
return this;
9683
}
9784

9885
public Environment environment() {
9986
return this.environment;
10087
}
10188

102-
public Instance setEnvironment(Environment environment) {
103-
this.environment = environment;
104-
return this;
105-
}
106-
10789
public List<Subscription> getSubscriptions() {
10890
return this.subscriptions;
10991
}
11092

111-
public Instance setSubscriptions(List<Subscription> subscriptions) {
112-
this.subscriptions = subscriptions;
113-
return this;
114-
}
115-
11693
public enum Environment {
117-
@JsonProperty("sandbox")
118-
SANDBOX,
94+
SANDBOX(1),
95+
PRODUCTION(2);
11996

120-
@JsonProperty("production")
121-
PRODUCTION
97+
private final int id;
98+
Environment(int id) {
99+
this.id = id;
100+
}
101+
102+
@DbEnumValue(storage = DbEnumType.INTEGER)
103+
public int id() {
104+
return this.id;
105+
}
122106
}
123107

124108
public DiffResult<Instance> diff(Instance other) {
@@ -130,18 +114,4 @@ public DiffResult<Instance> diff(Instance other) {
130114
.append("releaseVersion", other.releaseVersion, this.releaseVersion)
131115
.build();
132116
}
133-
134-
@Override
135-
public boolean equals(Object other) {
136-
if (other instanceof Instance i) {
137-
return Objects.equals(this.key, i.key);
138-
}
139-
140-
return false;
141-
}
142-
143-
@Override
144-
public int hashCode() {
145-
return Objects.hash(this.key);
146-
}
147117
}

src/main/java/com/github/sfxd/trust/core/users/User.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
@javax.persistence.Table(name = "users")
2020
public class User extends Entity {
2121

22-
@Column(unique = true, nullable = false)
22+
@Column(unique = true, nullable = false, columnDefinition = "character varying")
2323
private final String username;
2424

2525
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.github.sfxd.trust.integrations;
2+
3+
import com.github.sfxd.trust.core.instances.Instance;
4+
import com.github.sfxd.trust.core.instances.Instance.Environment;
5+
6+
import static com.github.sfxd.trust.core.instances.Instance.Environment.PRODUCTION;
7+
import static com.github.sfxd.trust.core.instances.Instance.Environment.SANDBOX;
8+
9+
record InstancePreviewViewModel(
10+
String key,
11+
String location,
12+
String releaseVersion,
13+
String releaseNumber,
14+
String status,
15+
String environment
16+
) {
17+
public Instance toInstance() {
18+
var instance = new Instance(this.key, this.env());
19+
instance.setLocation(this.location);
20+
instance.setReleaseVersion(this.releaseVersion);
21+
instance.setReleaseNumber(releaseNumber);
22+
instance.setStatus(this.status);
23+
24+
return instance;
25+
}
26+
27+
private Environment env() {
28+
return switch (this.environment) {
29+
case "sandbox" -> SANDBOX;
30+
case "production" -> PRODUCTION;
31+
default -> throw new IllegalArgumentException(this.environment);
32+
};
33+
}
34+
}

src/main/java/com/github/sfxd/trust/integrations/InstanceRefreshConsumer.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import static java.util.function.Function.identity;
2020

2121
@ApplicationScoped
22-
class InstanceRefreshConsumer implements Consumer<Collection<Instance>> {
22+
class InstanceRefreshConsumer implements Consumer<Collection<InstancePreviewViewModel>> {
2323

2424
private final InstanceRepository instanceRepository;
2525
private final Messages messages;
@@ -31,8 +31,9 @@ class InstanceRefreshConsumer implements Consumer<Collection<Instance>> {
3131
}
3232

3333
@Override
34-
public void accept(Collection<Instance> incomingInstances) {
34+
public void accept(Collection<InstancePreviewViewModel> incomingInstances) {
3535
Map<String, Instance> instancePreviews = incomingInstances.stream()
36+
.map(InstancePreviewViewModel::toInstance)
3637
.collect(Collectors.toMap(Instance::key, identity()));
3738

3839
Map<String, Instance> instances = this.instanceRepository.findByKeyIn(instancePreviews.keySet())
@@ -42,20 +43,19 @@ public void accept(Collection<Instance> incomingInstances) {
4243
for (Instance preview : instancePreviews.values()) {
4344
Instance current = instances.computeIfAbsent(preview.key(), key -> preview);
4445
DiffResult<Instance> diff = current.diff(preview);
45-
if (!diff.getDiffs().isEmpty())
46+
if (!diff.getDiffs().isEmpty()) {
4647
this.update(current, preview, diff);
48+
}
4749
}
4850

4951
this.instanceRepository.save(instances.values());
5052
}
5153

5254
private void update(Instance current, Instance preview, DiffResult<Instance> diff) {
53-
current
54-
.setLocation(preview.location())
55-
.setReleaseVersion(preview.releaseVersion())
56-
.setReleaseNumber(preview.releaseNumber())
57-
.setStatus(preview.status())
58-
.setEnvironment(preview.environment());
55+
current.setLocation(preview.location());
56+
current.setReleaseVersion(preview.releaseVersion());
57+
current.setReleaseNumber(preview.releaseNumber());
58+
current.setStatus(preview.status());
5959
this.sendMessages(current, diff);
6060
}
6161

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,35 @@
11
-- apply changes
22
create table instance (
33
id bigint generated by default as identity not null,
4-
"key" varchar(255) not null,
5-
location varchar(255),
6-
release_version varchar(255),
7-
release_number varchar(255),
8-
status varchar(255),
9-
environment varchar(10),
10-
constraint ck_instance_environment check ( environment in ('SANDBOX','PRODUCTION')),
4+
"key" character varying not null,
5+
location character varying,
6+
release_version character varying,
7+
release_number character varying,
8+
status character varying,
9+
environment integer not null,
10+
constraint ck_instance_environment check ( environment in (1,2)),
1111
constraint uq_instance_key unique ("key"),
1212
constraint pk_instance primary key (id)
1313
);
1414

15-
create table instance_user (
15+
create table subscription (
1616
id bigint generated by default as identity not null,
1717
instance_id bigint,
1818
user_id bigint,
19-
constraint pk_instance_user primary key (id)
19+
constraint pk_subscription primary key (id)
2020
);
2121

2222
create table users (
2323
id bigint generated by default as identity not null,
24-
username varchar(255) not null,
24+
username character varying not null,
2525
constraint uq_users_username unique (username),
2626
constraint pk_users primary key (id)
2727
);
2828

29-
create index ix_instance_user_instance_id on instance_user (instance_id);
30-
alter table instance_user add constraint fk_instance_user_instance_id foreign key (instance_id) references instance (id) on delete restrict on update restrict;
29+
-- foreign keys and indices
30+
create index ix_subscription_instance_id on subscription (instance_id);
31+
alter table subscription add constraint fk_subscription_instance_id foreign key (instance_id) references instance (id) on delete restrict on update restrict;
3132

32-
create index ix_instance_user_user_id on instance_user (user_id);
33-
alter table instance_user add constraint fk_instance_user_user_id foreign key (user_id) references users (id) on delete restrict on update restrict;
33+
create index ix_subscription_user_id on subscription (user_id);
34+
alter table subscription add constraint fk_subscription_user_id foreign key (user_id) references users (id) on delete restrict on update restrict;
3435

src/main/resources/dbmigration/model/1.0__init.model.xml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@
33
<changeSet type="apply">
44
<createTable name="instance" identityType="identity" pkName="pk_instance">
55
<column name="id" type="bigint" primaryKey="true"/>
6-
<column name="&quot;key&quot;" type="varchar" notnull="true" unique="uq_instance_key"/>
7-
<column name="location" type="varchar"/>
8-
<column name="release_version" type="varchar"/>
9-
<column name="release_number" type="varchar"/>
10-
<column name="status" type="varchar"/>
11-
<column name="environment" type="varchar(10)" checkConstraint="check ( environment in ('SANDBOX','PRODUCTION'))" checkConstraintName="ck_instance_environment"/>
6+
<column name="&quot;key&quot;" type="character varying" notnull="true" unique="uq_instance_key"/>
7+
<column name="location" type="character varying"/>
8+
<column name="release_version" type="character varying"/>
9+
<column name="release_number" type="character varying"/>
10+
<column name="status" type="character varying"/>
11+
<column name="environment" type="integer" notnull="true" checkConstraint="check ( environment in (1,2))" checkConstraintName="ck_instance_environment"/>
1212
</createTable>
13-
<createTable name="instance_user" identityType="identity" pkName="pk_instance_user">
13+
<createTable name="subscription" identityType="identity" pkName="pk_subscription">
1414
<column name="id" type="bigint" primaryKey="true"/>
15-
<column name="instance_id" type="bigint" references="instance.id" foreignKeyName="fk_instance_user_instance_id" foreignKeyIndex="ix_instance_user_instance_id"/>
16-
<column name="user_id" type="bigint" references="users.id" foreignKeyName="fk_instance_user_user_id" foreignKeyIndex="ix_instance_user_user_id"/>
15+
<column name="instance_id" type="bigint" references="instance.id" foreignKeyName="fk_subscription_instance_id" foreignKeyIndex="ix_subscription_instance_id"/>
16+
<column name="user_id" type="bigint" references="users.id" foreignKeyName="fk_subscription_user_id" foreignKeyIndex="ix_subscription_user_id"/>
1717
</createTable>
1818
<createTable name="users" identityType="identity" pkName="pk_users">
1919
<column name="id" type="bigint" primaryKey="true"/>
20-
<column name="username" type="varchar" notnull="true" unique="uq_users_username"/>
20+
<column name="username" type="character varying" notnull="true" unique="uq_users_username"/>
2121
</createTable>
2222
</changeSet>
2323
</migration>

0 commit comments

Comments
 (0)