// Path: src/main/java/com/lyubenblagoev/postfixrest/service/model/AccountChangeRequest.java
// @PasswordsMatches
// public class AccountChangeRequest implements PasswordConfirmable {
// 
// 	private Long id;
// 
// 	@NotEmpty
// 	@Pattern(regexp="^([a-z0-9]+((\\.|-)[a-z0-9]+)*)+$", message="must be a valid email prefix")
// 	private String username;
// 
// 	private String password;
// 	private String confirmPassword;
// 	private Long domainId;
// 	private Boolean enabled;
// 
// 	public Long getId() {
// 		return id;
// 	}
// 
// 	public void setId(Long id) {
// 		this.id = id;
// 	}
// 
// 	public String getUsername() {
// 		return username;
// 	}
// 
// 	public void setUsername(String username) {
// 		this.username = username;
// 	}
// 
// 	@Override
// 	public String getPassword() {
// 		return password;
// 	}
// 
// 	public void setPassword(String password) {
// 		this.password = password;
// 	}
// 
// 	@Override
// 	public String getPasswordConfirmation() {
// 		return confirmPassword;
// 	}
// 
// 	public void setConfirmPassword(String confirmPassword) {
// 		this.confirmPassword = confirmPassword;
// 	}
// 
// 	public Long getDomainId() {
// 		return domainId;
// 	}
// 
// 	public void setDomainId(Long domainId) {
// 		this.domainId = domainId;
// 	}
// 
// 	public Boolean getEnabled() {
// 		return enabled;
// 	}
// 
// 	public void setEnabled(Boolean enabled) {
// 		this.enabled = enabled;
// 	}
// 
// }
// 
// Path: src/main/java/com/lyubenblagoev/postfixrest/service/model/AccountResource.java
// public class AccountResource {
// 
// 	private Long id;
// 	
// 	private String username;
// 	
// 	private String domain;
// 	
// 	private Long domainId;
// 	
// 	@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ssZ")
// 	private Date created;
// 	
// 	@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ssZ")
// 	private Date updated;
// 	
// 	private boolean enabled;
// 	
// 	public static AccountResource fromAccount(Account account) {
// 		AccountResource resource = new AccountResource();
// 		resource.setId(account.getId());
// 		resource.setUsername(account.getUsername());
// 		resource.setDomain(account.getDomain().getName());
// 		resource.setDomainId(account.getDomain().getId());
// 		resource.setEnabled(account.isEnabled());
// 		resource.setCreated(account.getCreated());
// 		resource.setUpdated(account.getUpdated());
// 		return resource;
// 	}
// 	
// 	public static Account toAccount(AccountResource account, Domain domain) {
// 		Account result = new Account();
// 		result.setId(account.getId());
// 		result.setUsername(account.getUsername());
// 		result.setEnabled(account.isEnabled());
// 		result.setCreated(account.getCreated());
// 		result.setUpdated(account.getUpdated());
// 		result.setDomain(domain);
// 		return result;
// 	}
// 
// 	public Long getId() {
// 		return id;
// 	}
// 
// 	public void setId(Long id) {
// 		this.id = id;
// 	}
// 
// 	public String getUsername() {
// 		return username;
// 	}
// 
// 	public void setUsername(String username) {
// 		this.username = username;
// 	}
// 	
// 	public String getDomain() {
// 		return domain;
// 	}
// 	
// 	public void setDomain(String domainName) {
// 		this.domain = domainName;
// 	}
// 
// 	public Long getDomainId() {
// 		return domainId;
// 	}
// 
// 	public void setDomainId(Long domainId) {
// 		this.domainId = domainId;
// 	}
// 
// 	public Date getCreated() {
// 		return created;
// 	}
// 
// 	public void setCreated(Date created) {
// 		this.created = created;
// 	}
// 
// 	public Date getUpdated() {
// 		return updated;
// 	}
// 
// 	public void setUpdated(Date updated) {
// 		this.updated = updated;
// 	}
// 
// 	public boolean isEnabled() {
// 		return enabled;
// 	}
// 
// 	public void setEnabled(boolean enabled) {
// 		this.enabled = enabled;
// 	}
// 
// }


import java.util.List;
import java.util.Optional;
import com.lyubenblagoev.postfixrest.service.model.AccountChangeRequest;
import com.lyubenblagoev.postfixrest.service.model.AccountResource;
package com.lyubenblagoev.postfixrest.service;



public interface AccountService {
	
	Optional<AccountResource> getAccountById(Long id);

	List<AccountResource> getAccountsByDomainName(String name);

	Optional<AccountResource> getAccountByNameAndDomainName(String username, String domainName);

// Path: src/main/java/com/lyubenblagoev/postfixrest/service/model/AccountChangeRequest.java
// @PasswordsMatches
// public class AccountChangeRequest implements PasswordConfirmable {
// 
// 	private Long id;
// 
// 	@NotEmpty
// 	@Pattern(regexp="^([a-z0-9]+((\\.|-)[a-z0-9]+)*)+$", message="must be a valid email prefix")
// 	private String username;
// 
// 	private String password;
// 	private String confirmPassword;
// 	private Long domainId;
// 	private Boolean enabled;
// 
// 	public Long getId() {
// 		return id;
// 	}
// 
// 	public void setId(Long id) {
// 		this.id = id;
// 	}
// 
// 	public String getUsername() {
// 		return username;
// 	}
// 
// 	public void setUsername(String username) {
// 		this.username = username;
// 	}
// 
// 	@Override
// 	public String getPassword() {
// 		return password;
// 	}
// 
// 	public void setPassword(String password) {
// 		this.password = password;
// 	}
// 
// 	@Override
// 	public String getPasswordConfirmation() {
// 		return confirmPassword;
// 	}
// 
// 	public void setConfirmPassword(String confirmPassword) {
// 		this.confirmPassword = confirmPassword;
// 	}
// 
// 	public Long getDomainId() {
// 		return domainId;
// 	}
// 
// 	public void setDomainId(Long domainId) {
// 		this.domainId = domainId;
// 	}
// 
// 	public Boolean getEnabled() {
// 		return enabled;
// 	}
// 
// 	public void setEnabled(Boolean enabled) {
// 		this.enabled = enabled;
// 	}
// 
// }
// 
// Path: src/main/java/com/lyubenblagoev/postfixrest/service/model/AccountResource.java
// public class AccountResource {
// 
// 	private Long id;
// 	
// 	private String username;
// 	
// 	private String domain;
// 	
// 	private Long domainId;
// 	
// 	@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ssZ")
// 	private Date created;
// 	
// 	@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ssZ")
// 	private Date updated;
// 	
// 	private boolean enabled;
// 	
// 	public static AccountResource fromAccount(Account account) {
// 		AccountResource resource = new AccountResource();
// 		resource.setId(account.getId());
// 		resource.setUsername(account.getUsername());
// 		resource.setDomain(account.getDomain().getName());
// 		resource.setDomainId(account.getDomain().getId());
// 		resource.setEnabled(account.isEnabled());
// 		resource.setCreated(account.getCreated());
// 		resource.setUpdated(account.getUpdated());
// 		return resource;
// 	}
// 	
// 	public static Account toAccount(AccountResource account, Domain domain) {
// 		Account result = new Account();
// 		result.setId(account.getId());
// 		result.setUsername(account.getUsername());
// 		result.setEnabled(account.isEnabled());
// 		result.setCreated(account.getCreated());
// 		result.setUpdated(account.getUpdated());
// 		result.setDomain(domain);
// 		return result;
// 	}
// 
// 	public Long getId() {
// 		return id;
// 	}
// 
// 	public void setId(Long id) {
// 		this.id = id;
// 	}
// 
// 	public String getUsername() {
// 		return username;
// 	}
// 
// 	public void setUsername(String username) {
// 		this.username = username;
// 	}
// 	
// 	public String getDomain() {
// 		return domain;
// 	}
// 	
// 	public void setDomain(String domainName) {
// 		this.domain = domainName;
// 	}
// 
// 	public Long getDomainId() {
// 		return domainId;
// 	}
// 
// 	public void setDomainId(Long domainId) {
// 		this.domainId = domainId;
// 	}
// 
// 	public Date getCreated() {
// 		return created;
// 	}
// 
// 	public void setCreated(Date created) {
// 		this.created = created;
// 	}
// 
// 	public Date getUpdated() {
// 		return updated;
// 	}
// 
// 	public void setUpdated(Date updated) {
// 		this.updated = updated;
// 	}
// 
// 	public boolean isEnabled() {
// 		return enabled;
// 	}
// 
// 	public void setEnabled(boolean enabled) {
// 		this.enabled = enabled;
// 	}
// 
// }


// Path: src/main/java/com/lyubenblagoev/postfixrest/service/AccountService.java
import java.util.List;
import java.util.Optional;
import com.lyubenblagoev.postfixrest.service.model.AccountChangeRequest;
import com.lyubenblagoev.postfixrest.service.model.AccountResource;

package com.lyubenblagoev.postfixrest.service;



public interface AccountService {
	
	Optional<AccountResource> getAccountById(Long id);

	List<AccountResource> getAccountsByDomainName(String name);

	Optional<AccountResource> getAccountByNameAndDomainName(String username, String domainName);

	Optional<AccountResource> save(AccountChangeRequest user);