• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

wistefan / tmforum-api / #62

19 Oct 2023 01:12PM UTC coverage: 68.167% (+0.5%) from 67.631%
#62

push

web-flow
Account management api implementation (#34)

* Creating the directories

* Adding pom

* now adding pom, error on last commit

* Account complete implementation, no testing

* Solving problems with git config

* Adding some left out classes and some tests

* Adding FinancialAccount Integration Test and solving some errors on the main classes

* adding Integration Test and solved errors for Party, Bill, Settlement and Financial Account, and BillFormat

* Adding final integration tests and adapting api to query format

* Fixing Event Subscription

* Cleaning the code from comments

---------

Co-authored-by: MVazquez <marcosvazquezcampos@MacBook-Air-de-Marcos.local>

475 of 475 new or added lines in 32 files covered. (100.0%)

3150 of 4621 relevant lines covered (68.17%)

0.68 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.55
/account/src/main/java/org/fiware/tmforum/account/rest/FinancialAccountApiController.java
1
package org.fiware.tmforum.account.rest;
2

3
import io.micronaut.http.HttpResponse;
4
import io.micronaut.http.annotation.Controller;
5
import lombok.extern.slf4j.Slf4j;
6
import org.fiware.account.api.FinancialAccountApi;
7
import org.fiware.account.model.FinancialAccountCreateVO;
8
import org.fiware.account.model.FinancialAccountUpdateVO;
9
import org.fiware.account.model.FinancialAccountVO;
10
import org.fiware.tmforum.common.notification.EventHandler;
11
import org.fiware.tmforum.common.exception.TmForumException;
12
import org.fiware.tmforum.common.exception.TmForumExceptionReason;
13
import org.fiware.tmforum.common.mapping.IdHelper;
14
import org.fiware.tmforum.common.querying.QueryParser;
15
import org.fiware.tmforum.common.repository.TmForumRepository;
16
import org.fiware.tmforum.common.rest.AbstractApiController;
17
import org.fiware.tmforum.common.validation.ReferenceValidationService;
18
import org.fiware.tmforum.common.validation.ReferencedEntity;
19
import org.fiware.tmforum.account.TMForumMapper;
20
import org.fiware.tmforum.account.domain.FinancialAccount;
21
import reactor.core.publisher.Mono;
22

23
import javax.annotation.Nullable;
24
import java.util.ArrayList;
25
import java.util.List;
26
import java.util.Optional;
27
import java.util.UUID;
28

29
@Slf4j
1✔
30
@Controller("${general.basepath:/}")
31
public class FinancialAccountApiController extends AbstractApiController<FinancialAccount> implements FinancialAccountApi {
32

33
    private final TMForumMapper tmForumMapper;
34

35
    public FinancialAccountApiController(QueryParser queryParser, ReferenceValidationService validationService,
36
                                         TmForumRepository productFinancialAccountRepository, TMForumMapper tmForumMapper, EventHandler eventHandler) {
37
        super(queryParser, validationService, productFinancialAccountRepository, eventHandler);
1✔
38
        this.tmForumMapper = tmForumMapper;
1✔
39
    }
1✔
40

41
    @Override
42
    public Mono<HttpResponse<FinancialAccountVO>> createFinancialAccount(FinancialAccountCreateVO financialAccountVo) {
43
        FinancialAccount financialAccount = tmForumMapper.map(
1✔
44
                tmForumMapper.map(financialAccountVo, IdHelper.toNgsiLd(UUID.randomUUID().toString(), FinancialAccount.TYPE_FINANCIALAC)));
1✔
45

46
        return create(getCheckingMono(financialAccount), FinancialAccount.class)
1✔
47
                .map(tmForumMapper::map)
1✔
48
                .map(HttpResponse::created);
1✔
49
    }
50

51
    private Mono<FinancialAccount> getCheckingMono(FinancialAccount financialAccount) {
52
        List<List<? extends ReferencedEntity>> references = new ArrayList<>();
1✔
53
        references.add(financialAccount.getRelatedParty());
1✔
54
        return getCheckingMono(financialAccount, references)
1✔
55
                .onErrorMap(throwable -> new TmForumException(
1✔
56
                        String.format("Was not able to create financialAccount %s", financialAccount.getId()), throwable,
1✔
57
                        TmForumExceptionReason.INVALID_RELATIONSHIP));
58
    }
59

60
    @Override
61
    public Mono<HttpResponse<Object>> deleteFinancialAccount(String id) {
62
        return delete(id);
1✔
63
    }
64

65
    @Override
66
    public Mono<HttpResponse<List<FinancialAccountVO>>> listFinancialAccount(@Nullable String fields, @Nullable Integer offset,
67
                                                                                       @Nullable Integer limit) {
68
        return list(offset, limit, FinancialAccount.TYPE_FINANCIALAC, FinancialAccount.class)
1✔
69
                .map(categoryStream -> categoryStream.map(tmForumMapper::map).toList())
1✔
70
                .switchIfEmpty(Mono.just(List.of()))
1✔
71
                .map(HttpResponse::ok);
1✔
72
    }
73

74
    @Override
75
    public Mono<HttpResponse<FinancialAccountVO>> patchFinancialAccount(String id, FinancialAccountUpdateVO financialAccountUpdateVO) {
76
        // non-ngsi-ld ids cannot exist.
77
        if (!IdHelper.isNgsiLdId(id)) {
1✔
78
            throw new TmForumException("Did not receive a valid id, such financialAccount cannot exist.",
×
79
                    TmForumExceptionReason.NOT_FOUND);
80
        }
81
        FinancialAccount updatedFinancialAccount = tmForumMapper.map(tmForumMapper.map(financialAccountUpdateVO, id));
1✔
82

83
        return patch(id, updatedFinancialAccount, getCheckingMono(updatedFinancialAccount), FinancialAccount.class)
1✔
84
                .map(tmForumMapper::map)
1✔
85
                .map(HttpResponse::ok);
1✔
86
    }
87

88
    @Override
89
    public Mono<HttpResponse<FinancialAccountVO>> retrieveFinancialAccount(String id, @Nullable String fields) {
90
        return retrieve(id, FinancialAccount.class)
1✔
91
                .switchIfEmpty(Mono.error(new TmForumException("No such financialAccount exists.",
1✔
92
                        TmForumExceptionReason.NOT_FOUND)))
93
                .map(tmForumMapper::map)
1✔
94
                .map(HttpResponse::ok);
1✔
95
    }
96
}
97

STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc