Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add interfaces for CRUD services #20743

Merged
merged 36 commits into from
Jan 13, 2025
Merged

feat: Add interfaces for CRUD services #20743

merged 36 commits into from
Jan 13, 2025

Conversation

Artur-
Copy link
Member

@Artur- Artur- commented Dec 18, 2024

These were previously in Hilla but are equally useful in Flow applications

Copy link

github-actions bot commented Dec 18, 2024

Test Results

1 162 files  + 3  1 162 suites  +3   1h 32m 47s ⏱️ +39s
7 618 tests +35  7 562 ✅ +35  56 💤 ±0  0 ❌ ±0 
7 966 runs  +43  7 901 ✅ +43  65 💤 ±0  0 ❌ ±0 

Results for commit 961675c. ± Comparison against base commit 4688eb1.

♻️ This comment has been updated with latest results.

These were previously in Hilla but are equally useful in Flow applications
@Artur- Artur- requested a review from peholmst December 18, 2024 16:17
Copy link
Member

@peholmst peholmst left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this is a breaking change anyway, I took the liberty of being extra picky with the review.

@@ -0,0 +1,2 @@
@org.springframework.lang.NonNullApi
package com.vaadin.flow.spring.data.jpa;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe also add @NullMarked from JSpecify?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why would we need both?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If removing @NonNullApi does not break anything, then by all means remove it.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the contrary, Hilla only supports @NonNullApi

@@ -0,0 +1,2 @@
@org.springframework.lang.NonNullApi
package com.vaadin.flow.spring.data;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same thing here?

@JsonSubTypes({ @Type(value = OrFilter.class, name = "or"),
@Type(value = AndFilter.class, name = "and"),
@Type(value = PropertyStringFilter.class, name = "propertyString") })
public class Filter implements Serializable {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are the Filter classes meant to mainly be created by Jackson, or is there a situation where a developer may want to create them in Java as well? Also why are the Filter classes mutable and not immutable?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I need to create some examples to show usage before this is merged. I think they should be public and ok to create by hand but they don't need to be mutable

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added convenience constructors. Some usage examples in https://github.com/Artur-/flow-crud-demo/tree/main/src/main/java/com/example/demo

@@ -0,0 +1,2 @@
@org.springframework.lang.NonNullApi
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider adding @NullMarked here.

@mshabarov mshabarov removed the request for review from caalador January 10, 2025 13:13
* @return
*/
@Override
public long count(@Nullable Filter filter) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we have shorthand count() method ?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could. Should we? :D

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should, minor thing but IMO makes the code reading a bit clearer when count has no null in the project.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

However, now count and list works differently.
Also, it is impossible to do something like

        grid.setItemsPageable(pageable -> productService.list(pageable, filter),
                pageable -> productService.count(filter));

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reverted count() again. Let's start without it and see?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, okay 👍

@mshabarov
Copy link
Contributor

Made a quick example of how a CRUD service may look like with/without these classes vaadin/flow-crm-tutorial@crud-services...without-crud-services.
A big benefit for me is obviously a simpler filtering: no need to make my own query/criteria code for it.

mshabarov
mshabarov previously approved these changes Jan 13, 2025
Copy link
Contributor

@mshabarov mshabarov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall looks good and has many benefits of being available in Flow.
LGTM.

mshabarov
mshabarov previously approved these changes Jan 13, 2025
This reverts commit c16124f.
mshabarov
mshabarov previously approved these changes Jan 13, 2025
@mshabarov
Copy link
Contributor

Fixes #20834.

@Artur- Artur- enabled auto-merge (squash) January 13, 2025 11:05
@Artur- Artur- merged commit c96213d into main Jan 13, 2025
26 checks passed
@Artur- Artur- deleted the crud-interfaces branch January 13, 2025 12:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants