// Path: src/test/java/com/github/ggeorgovassilis/springjsonmapper/services/Account.java
// @JsonPropertyOrder({ "accountNumber", "balance", "owner" })
// public class Account implements Serializable {
// 
// 	private static final long serialVersionUID = 3338920622026973343L;
// 	private String accountNumber;
// 	private int balance;
// 	private Customer owner;
// 
// 	public String getAccountNumber() {
// 		return accountNumber;
// 	}
// 
// 	public void setAccountNumber(String accountNumber) {
// 		this.accountNumber = accountNumber;
// 	}
// 
// 	public int getBalance() {
// 		return balance;
// 	}
// 
// 	public void setBalance(int balance) {
// 		this.balance = balance;
// 	}
// 
// 	public Customer getOwner() {
// 		return owner;
// 	}
// 
// 	public void setOwner(Customer owner) {
// 		this.owner = owner;
// 	}
// 
// }
// 
// Path: src/test/java/com/github/ggeorgovassilis/springjsonmapper/services/BankService.java
// public interface BankService {
// 
// 	Account transfer(Account fromAccount, Customer actor, Account toAccount, int amount, boolean sendConfirmationSms);
// 
// 	Boolean checkAccount(Account account);
// 
// 	byte[] updatePhoto(String name, byte[] photo);
// 
// 	Account joinAccounts(Account account1, Account account2);
// 
// 	Customer authenticate(String name, String password, String sessionId);
// 
// 	Account getAccount(int id);
// 
// 	boolean isSessionAlive(String sid);
// 
// 	boolean doesCustomerExist(String name);
// 
// 	boolean doesCustomerExist2(String name);
// 
// 	List<Account> getAllAccounts();
// 
// }
// 
// Path: src/test/java/com/github/ggeorgovassilis/springjsonmapper/services/Customer.java
// public class Customer implements Serializable {
// 
// 	private static final long serialVersionUID = 5450750236224806988L;
// 	private String name;
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public void setName(String name) {
// 		this.name = name;
// 	}
// 
// }


import com.github.ggeorgovassilis.springjsonmapper.model.Header;
import com.github.ggeorgovassilis.springjsonmapper.services.Account;
import com.github.ggeorgovassilis.springjsonmapper.services.BankService;
import com.github.ggeorgovassilis.springjsonmapper.services.Customer;
import org.springframework.web.bind.annotation.*;
import java.util.List;
package com.github.ggeorgovassilis.springjsonmapper.services.spring;



/**
 * Mapping to a hypothetical bank service REST API using Spring annotations
 *
 * @author george georgovassilis
 */
public interface BankServiceShortcutSpring extends BankService {

	@Override
	@PostMapping("/transfer")
	Account transfer(@RequestBody @RequestParam("fromAccount") Account fromAccount,
	                 @RequestBody @RequestParam("actor") Customer actor,
	                 @RequestBody @RequestParam("toAccount") Account toAccount, @RequestBody @RequestParam("amount") int amount,
	                 @RequestParam("sendConfirmationSms") boolean sendConfirmationSms);

	@Override
	@PostMapping("/verify")
	Boolean checkAccount(@RequestBody Account account);

	@Override
	@PostMapping(value = "/photo", consumes = {"image/gif", "image/jpeg", "image/png"}, produces = {"image/jpeg"})
	byte[] updatePhoto(@RequestParam("name") String name, @RequestBody byte[] photo);

	@Override
	@PostMapping("/join-accounts")
	Account joinAccounts(@RequestPart @RequestParam("account1") Account account1,
	                     @RequestPart @RequestParam("account2") Account account2);

	@Override
	@PostMapping("/authenticate")
	Customer authenticate(@RequestPart @RequestParam("name") String name,
// Path: src/test/java/com/github/ggeorgovassilis/springjsonmapper/services/Account.java
// @JsonPropertyOrder({ "accountNumber", "balance", "owner" })
// public class Account implements Serializable {
// 
// 	private static final long serialVersionUID = 3338920622026973343L;
// 	private String accountNumber;
// 	private int balance;
// 	private Customer owner;
// 
// 	public String getAccountNumber() {
// 		return accountNumber;
// 	}
// 
// 	public void setAccountNumber(String accountNumber) {
// 		this.accountNumber = accountNumber;
// 	}
// 
// 	public int getBalance() {
// 		return balance;
// 	}
// 
// 	public void setBalance(int balance) {
// 		this.balance = balance;
// 	}
// 
// 	public Customer getOwner() {
// 		return owner;
// 	}
// 
// 	public void setOwner(Customer owner) {
// 		this.owner = owner;
// 	}
// 
// }
// 
// Path: src/test/java/com/github/ggeorgovassilis/springjsonmapper/services/BankService.java
// public interface BankService {
// 
// 	Account transfer(Account fromAccount, Customer actor, Account toAccount, int amount, boolean sendConfirmationSms);
// 
// 	Boolean checkAccount(Account account);
// 
// 	byte[] updatePhoto(String name, byte[] photo);
// 
// 	Account joinAccounts(Account account1, Account account2);
// 
// 	Customer authenticate(String name, String password, String sessionId);
// 
// 	Account getAccount(int id);
// 
// 	boolean isSessionAlive(String sid);
// 
// 	boolean doesCustomerExist(String name);
// 
// 	boolean doesCustomerExist2(String name);
// 
// 	List<Account> getAllAccounts();
// 
// }
// 
// Path: src/test/java/com/github/ggeorgovassilis/springjsonmapper/services/Customer.java
// public class Customer implements Serializable {
// 
// 	private static final long serialVersionUID = 5450750236224806988L;
// 	private String name;
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public void setName(String name) {
// 		this.name = name;
// 	}
// 
// }


// Path: src/test/java/com/github/ggeorgovassilis/springjsonmapper/services/spring/BankServiceShortcutSpring.java
import com.github.ggeorgovassilis.springjsonmapper.model.Header;
import com.github.ggeorgovassilis.springjsonmapper.services.Account;
import com.github.ggeorgovassilis.springjsonmapper.services.BankService;
import com.github.ggeorgovassilis.springjsonmapper.services.Customer;
import org.springframework.web.bind.annotation.*;
import java.util.List;

package com.github.ggeorgovassilis.springjsonmapper.services.spring;



/**
 * Mapping to a hypothetical bank service REST API using Spring annotations
 *
 * @author george georgovassilis
 */
public interface BankServiceShortcutSpring extends BankService {

	@Override
	@PostMapping("/transfer")
	Account transfer(@RequestBody @RequestParam("fromAccount") Account fromAccount,
	                 @RequestBody @RequestParam("actor") Customer actor,
	                 @RequestBody @RequestParam("toAccount") Account toAccount, @RequestBody @RequestParam("amount") int amount,
	                 @RequestParam("sendConfirmationSms") boolean sendConfirmationSms);

	@Override
	@PostMapping("/verify")
	Boolean checkAccount(@RequestBody Account account);

	@Override
	@PostMapping(value = "/photo", consumes = {"image/gif", "image/jpeg", "image/png"}, produces = {"image/jpeg"})
	byte[] updatePhoto(@RequestParam("name") String name, @RequestBody byte[] photo);

	@Override
	@PostMapping("/join-accounts")
	Account joinAccounts(@RequestPart @RequestParam("account1") Account account1,
	                     @RequestPart @RequestParam("account2") Account account2);

	@Override
	@PostMapping("/authenticate")
	Customer authenticate(@RequestPart @RequestParam("name") String name,
	                      @RequestPart @RequestParam("password") String password, @CookieValue("sid") String sessionId);