// Path: src/main/java/org/cri/redmetrics/csv/CsvEntityConverter.java
// public interface CsvEntityConverter<E extends Entity> {
// 
//     public void write(CSVWriter csvWriter, List<E> models);
// 
// }
// 
// Path: src/main/java/org/cri/redmetrics/dao/PlayerDao.java
// public class PlayerDao extends EntityDao<Player> {
//     
//     @Inject
//     public PlayerDao(ConnectionSource connectionSource) throws SQLException {
//         super(connectionSource, Player.class);
//     }
// 
//     public Player findByEmail(String email) {
//         try {
//             if (email == null) return null;
//             List<Player> players = orm.queryForEq("email", email);
//             assert players.size() <= 1; // email should be unique
//             if (players.isEmpty()) return null;
//             else return players.get(0);
//         } catch (SQLException e) {
//             throw new DbException(e);
//         }
//     }
// 
// }
// 
// Path: src/main/java/org/cri/redmetrics/json/PlayerJsonConverter.java
// public class PlayerJsonConverter extends EntityJsonConverter<Player> {
// 
//     @Inject
//     PlayerJsonConverter(Gson gson, JsonParser jsonParser) {
//         super(Player.class, gson, jsonParser);
//     }
// 
// }
// 
// Path: src/main/java/org/cri/redmetrics/model/Player.java
// @Data
// @DatabaseTable(tableName = "players")
// @NoArgsConstructor
// @AllArgsConstructor
// @EqualsAndHashCode(callSuper = true)
// public class Player extends Entity {
// 
//     @DatabaseField
//     private Date birthDate;
// 
//     @DatabaseField
//     private String region;
// 
//     @DatabaseField
//     private String country;
// 
//     @DatabaseField
//     private Gender gender;
// 
//     @DatabaseField(index = true)
//     private String externalId;
// 
// }


import com.google.inject.Inject;
import org.cri.redmetrics.csv.CsvEntityConverter;
import org.cri.redmetrics.dao.PlayerDao;
import org.cri.redmetrics.json.PlayerJsonConverter;
import org.cri.redmetrics.model.Player;
package org.cri.redmetrics.controller;


public class PlayerController extends Controller<Player, PlayerDao> {

    @Inject
// Path: src/main/java/org/cri/redmetrics/csv/CsvEntityConverter.java
// public interface CsvEntityConverter<E extends Entity> {
// 
//     public void write(CSVWriter csvWriter, List<E> models);
// 
// }
// 
// Path: src/main/java/org/cri/redmetrics/dao/PlayerDao.java
// public class PlayerDao extends EntityDao<Player> {
//     
//     @Inject
//     public PlayerDao(ConnectionSource connectionSource) throws SQLException {
//         super(connectionSource, Player.class);
//     }
// 
//     public Player findByEmail(String email) {
//         try {
//             if (email == null) return null;
//             List<Player> players = orm.queryForEq("email", email);
//             assert players.size() <= 1; // email should be unique
//             if (players.isEmpty()) return null;
//             else return players.get(0);
//         } catch (SQLException e) {
//             throw new DbException(e);
//         }
//     }
// 
// }
// 
// Path: src/main/java/org/cri/redmetrics/json/PlayerJsonConverter.java
// public class PlayerJsonConverter extends EntityJsonConverter<Player> {
// 
//     @Inject
//     PlayerJsonConverter(Gson gson, JsonParser jsonParser) {
//         super(Player.class, gson, jsonParser);
//     }
// 
// }
// 
// Path: src/main/java/org/cri/redmetrics/model/Player.java
// @Data
// @DatabaseTable(tableName = "players")
// @NoArgsConstructor
// @AllArgsConstructor
// @EqualsAndHashCode(callSuper = true)
// public class Player extends Entity {
// 
//     @DatabaseField
//     private Date birthDate;
// 
//     @DatabaseField
//     private String region;
// 
//     @DatabaseField
//     private String country;
// 
//     @DatabaseField
//     private Gender gender;
// 
//     @DatabaseField(index = true)
//     private String externalId;
// 
// }


// Path: src/main/java/org/cri/redmetrics/controller/PlayerController.java
import com.google.inject.Inject;
import org.cri.redmetrics.csv.CsvEntityConverter;
import org.cri.redmetrics.dao.PlayerDao;
import org.cri.redmetrics.json.PlayerJsonConverter;
import org.cri.redmetrics.model.Player;

package org.cri.redmetrics.controller;


public class PlayerController extends Controller<Player, PlayerDao> {

    @Inject
    PlayerController(PlayerDao dao, PlayerJsonConverter jsonConverter, CsvEntityConverter<Player> csvEntityConverter) {