Skip to content

Commit 655ff33

Browse files
committed
Split buyers and sellers: split them in database and show in different inputs.
Addressed to #499
1 parent a127b32 commit 655ff33

8 files changed

+139
-13
lines changed

src/main/java/ru/mystamps/web/dao/TransactionParticipantDao.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@
2424

2525
public interface TransactionParticipantDao {
2626
void add(AddParticipantDbDto participant);
27-
List<EntityWithIdDto> findAllAsEntityWithIdDto();
27+
List<EntityWithIdDto> findAllBuyers();
28+
List<EntityWithIdDto> findAllSellers();
2829
}

src/main/java/ru/mystamps/web/dao/dto/AddParticipantDbDto.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@
2323

2424
@Getter
2525
@Setter
26-
@ToString
26+
@ToString(of = { "name", "buyer", "seller" })
2727
public class AddParticipantDbDto {
2828
private String name;
2929
private String url;
30+
private Boolean buyer;
31+
private Boolean seller;
3032
}

src/main/java/ru/mystamps/web/dao/impl/JdbcTransactionParticipantDao.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,19 @@ public class JdbcTransactionParticipantDao implements TransactionParticipantDao
4040
@Value("${transaction_participant.create}")
4141
private String addParticipantSql;
4242

43-
@Value("${transaction_participants.find_all}")
44-
private String findAllParticipantsSql;
43+
@Value("${transaction_participants.find_all_buyers}")
44+
private String findAllBuyersSql;
45+
46+
@Value("${transaction_participants.find_all_sellers}")
47+
private String findAllSellersSql;
4548

4649
@Override
4750
public void add(AddParticipantDbDto participant) {
4851
Map<String, Object> params = new HashMap<>();
4952
params.put("name", participant.getName());
5053
params.put("url", participant.getUrl());
54+
params.put("buyer", participant.getBuyer());
55+
params.put("seller", participant.getSeller());
5156

5257
int affected = jdbcTemplate.update(addParticipantSql, params);
5358

@@ -59,8 +64,13 @@ public void add(AddParticipantDbDto participant) {
5964
}
6065

6166
@Override
62-
public List<EntityWithIdDto> findAllAsEntityWithIdDto() {
63-
return jdbcTemplate.query(findAllParticipantsSql, RowMappers::forEntityWithIdDto);
67+
public List<EntityWithIdDto> findAllBuyers() {
68+
return jdbcTemplate.query(findAllBuyersSql, RowMappers::forEntityWithIdDto);
69+
}
70+
71+
@Override
72+
public List<EntityWithIdDto> findAllSellers() {
73+
return jdbcTemplate.query(findAllSellersSql, RowMappers::forEntityWithIdDto);
6474
}
6575

6676
}

src/main/java/ru/mystamps/web/service/TransactionParticipantServiceImpl.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,24 +51,26 @@ public void add(AddParticipantDto dto) {
5151
AddParticipantDbDto participant = new AddParticipantDbDto();
5252
participant.setName(dto.getName());
5353
participant.setUrl(dto.getUrl());
54+
participant.setBuyer(Boolean.TRUE);
55+
participant.setSeller(Boolean.TRUE);
5456

5557
transactionParticipantDao.add(participant);
5658

57-
log.info("Participant with name '{}' has been created", participant.getName());
59+
log.info("Participant has been created ({})", participant);
5860
}
5961

6062
@Override
6163
@Transactional(readOnly = true)
6264
@PreAuthorize(HasAuthority.ADD_SERIES_SALES)
6365
public List<EntityWithIdDto> findAllBuyers() {
64-
return transactionParticipantDao.findAllAsEntityWithIdDto();
66+
return transactionParticipantDao.findAllBuyers();
6567
}
6668

6769
@Override
6870
@Transactional(readOnly = true)
6971
@PreAuthorize(HasAuthority.ADD_SERIES_SALES)
7072
public List<EntityWithIdDto> findAllSellers() {
71-
return transactionParticipantDao.findAllAsEntityWithIdDto();
73+
return transactionParticipantDao.findAllSellers();
7274
}
7375

7476
}

src/main/resources/liquibase/version/0.4.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,6 @@
3737
<include file="0.4/2017-11-09--series_import_parsed_data_release_year_field.xml" relativeToChangelogFile="true" />
3838
<include file="0.4/2017-11-09--categories_aliases.xml" relativeToChangelogFile="true" />
3939
<include file="0.4/2017-11-09--countries_aliases.xml" relativeToChangelogFile="true" />
40+
<include file="0.4/2017-11-14--separate_buyers_and_sellers.xml" relativeToChangelogFile="true" />
4041

4142
</databaseChangeLog>
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<databaseChangeLog
3+
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
6+
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd">
7+
8+
<changeSet id="add-is_buyer_seller-fields" author="php-coder" context="scheme">
9+
10+
<addColumn tableName="transaction_participants">
11+
<column name="is_buyer" type="BOOLEAN" />
12+
<column name="is_seller" type="BOOLEAN" />
13+
</addColumn>
14+
15+
</changeSet>
16+
17+
<changeSet id="assign-is_buyer-column" author="php-coder" context="test-data, prod-data">
18+
<comment>Find and mark all buyers</comment>
19+
20+
<sql>
21+
UPDATE transaction_participants p
22+
SET is_buyer = (
23+
SELECT TRUE
24+
FROM series_sales ss
25+
WHERE ss.buyer_id = p.id
26+
UNION
27+
SELECT FALSE
28+
LIMIT 1
29+
)
30+
</sql>
31+
32+
<rollback>
33+
<sql>
34+
UPDATE transaction_participants
35+
SET is_buyer = NULL
36+
</sql>
37+
</rollback>
38+
39+
</changeSet>
40+
41+
<changeSet id="assign-is_seller-column" author="php-coder" context="test-data, prod-data">
42+
<comment>Find and mark all sellers</comment>
43+
44+
<sql>
45+
UPDATE transaction_participants p
46+
SET is_seller = (
47+
SELECT TRUE
48+
FROM series_sales ss
49+
WHERE ss.seller_id = p.id
50+
UNION
51+
SELECT FALSE
52+
LIMIT 1
53+
)
54+
</sql>
55+
56+
<rollback>
57+
<sql>
58+
UPDATE transaction_participants
59+
SET is_seller = NULL
60+
</sql>
61+
</rollback>
62+
63+
</changeSet>
64+
65+
<changeSet id="make-is_buyer-non-nullable" author="php-coder" context="scheme">
66+
<preConditions>
67+
<sqlCheck expectedResult="0">
68+
SELECT COUNT(*)
69+
FROM transaction_participants
70+
WHERE is_buyer IS FALSE
71+
AND is_seller IS FALSE
72+
</sqlCheck>
73+
</preConditions>
74+
75+
<addNotNullConstraint
76+
tableName="transaction_participants"
77+
columnName="is_buyer"
78+
columnDataType="BOOLEAN" />
79+
</changeSet>
80+
81+
<changeSet id="make-is_seller-non-nullable" author="php-coder" context="scheme">
82+
<preConditions>
83+
<sqlCheck expectedResult="0">
84+
SELECT COUNT(*)
85+
FROM transaction_participants
86+
WHERE is_buyer IS FALSE
87+
AND is_seller IS FALSE
88+
</sqlCheck>
89+
</preConditions>
90+
91+
<addNotNullConstraint
92+
tableName="transaction_participants"
93+
columnName="is_seller"
94+
columnDataType="BOOLEAN" />
95+
</changeSet>
96+
97+
</databaseChangeLog>

src/main/resources/sql/transaction_participants_dao_queries.properties

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,24 @@ INSERT \
33
INTO transaction_participants \
44
( name \
55
, url \
6+
, is_buyer \
7+
, is_seller \
68
) \
79
VALUES \
810
( :name \
911
, :url \
12+
, :buyer \
13+
, :seller \
1014
)
1115

12-
transaction_participants.find_all = \
16+
transaction_participants.find_all_buyers = \
1317
SELECT id \
1418
, name \
15-
FROM transaction_participants
19+
FROM transaction_participants \
20+
WHERE is_buyer = TRUE
21+
22+
transaction_participants.find_all_sellers = \
23+
SELECT id \
24+
, name \
25+
FROM transaction_participants \
26+
WHERE is_seller = TRUE

src/test/groovy/ru/mystamps/web/service/TransactionParticipantServiceImplTest.groovy

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ class TransactionParticipantServiceImplTest extends Specification {
7171
1 * transactionParticipantDao.add({ AddParticipantDbDto participant ->
7272
assert participant?.name == expectedName
7373
assert participant?.url == expectedUrl
74+
assert participant?.buyer
75+
assert participant?.seller
7476
return true
7577
})
7678
}
@@ -85,7 +87,7 @@ class TransactionParticipantServiceImplTest extends Specification {
8587
when:
8688
List<EntityWithIdDto> result = service.findAllBuyers()
8789
then:
88-
1 * transactionParticipantDao.findAllAsEntityWithIdDto() >> expectedResult
90+
1 * transactionParticipantDao.findAllBuyers() >> expectedResult
8991
and:
9092
result == expectedResult
9193
}
@@ -100,7 +102,7 @@ class TransactionParticipantServiceImplTest extends Specification {
100102
when:
101103
List<EntityWithIdDto> result = service.findAllSellers()
102104
then:
103-
1 * transactionParticipantDao.findAllAsEntityWithIdDto() >> expectedResult
105+
1 * transactionParticipantDao.findAllSellers() >> expectedResult
104106
and:
105107
result == expectedResult
106108
}

0 commit comments

Comments
 (0)