# Pawnies Code review
Hello team ! As promised during our last meeting, we do a small code review of your code base.
We were really impressed by the code you were able to produce. It is clean, consistent and uses a lot of new technologies (Jetpack-Compose and Kotlin), this means that we have not much to say.
With your team, we can see that the code review process is really working and makes the code really really good. The small comments we will do mostly concern chess and missing comments but not on the implementation details.
# General Remark
## Code structure
- The package structure is relatively well organized. We were just wondering if the package `mobile.state` should be moved in `mobile.ui` or not.
## Code style
- You use a lot of Kotlin features, making the core more readable.
- All the conventions you chose to apply at the start of the project make the code very understanble and consistent. Congratulations for that.
- The classes and functions are well commented.
- You could consider using `enum` values for the collection and field names instead of hardcoded string (e.g. `games`, `users`,`whiteId`, `blackid`, ...). By doing this, you avoid magic number(s) and potential mistakes in the code by writing the value again.
# By file
*Only files for which we have a comment are referenced here.*
## Package `mobile.application.authentication`
### `AuthenticatedUser`
- Maybe you can just rename the `firestore` variable into `store` to avoid confusion.
- The parameters of the class are not commented.
## Package `mobile.application.chess`
### `ChessFacade`
- You could consider using `enum` values for the collection instead of hardcoded string (e.g. `games`, `users`,`whiteId`, `blackid`, ...)
- private data class `StoreMatch` not commented.
## Package `mobile.application.chess.engine`
### `Board`
- Missing comment for `@return` parameter on function `set`. Moreover, you could add a comment explaining that if the piece is null, it is deleted from the broad.
### `Color`
- Missing comment for the function `denormalize`.
## Package `mobile.application.chess.engine.rules`
### `Moves`
- (Regarding TODO in line 204) Just to remind you, in the `castling` functions the position that should not be in check are not the same as the one that have to be empty. We advise you to take only the king's direction as an argument, as the rest is either a position known at the start (`kingStart`) or positions that can be calculated from this direction (empty = all positions where the rook passes, check = all positions where the king passes). For us, this seems better than hardcoded positions.
- We also think that should avoid magic number such as `3` line 239 in the code and use them as constant.
## Package `mobile.application.chess.engine.implementation`
### `PersistentGame`
- Missing comment for some `@param` of the constructor.
## Package `mobile.application.social`
- In the `search` method, make sure not to query the database each time a character is entered as this will quickyl make you run out of Firestore resources.
## Package `mobile.infrastructure.persistence.store`
### `Query`
- Missing comment for `@return` parameter on function `limit`.
## Package `mobile.infrastructure.state` and `mobile.infrastructure.ui`
We didn't check in full details how these two packages work since they consist of graphical stuff and it seems that you are more aware about how this works than us.
# Tests
Your tests look very good, kudos for that.
# Conclusion
Your code is very good overall, you have nice abstractions and lots of efforts put in. The documentation and maning are clear and understable, the codestyle is consistent. The app design is very cool. Keep up the good work!