// Path: src/main/java/com/pollistics/models/Poll.java
// @Document(collection="polls")
// public class Poll {
// 	@Id
// 	private ObjectId id;
// 
// 	@Length(min=1, max=500, message="Poll title must be be between 1 and 500 characters")
// 	private String title;
// 	private HashMap<String,Integer> options;
// 	private User user;
// 
// 	@Indexed(unique = true, sparse = true)
// 	private String slug;
// 
// 	// todo: orden these constructors with `this(...arg)`
// 
// 	public Poll(String title, HashMap<String,Integer> options) {
// 		this.title = title;
// 		this.options = options;
// 		this.slug = createSlug();
// 	}
// 
// 	public Poll(ObjectId id, String title, HashMap<String, Integer> options) {
// 		this.id = id;
// 		this.title = title;
// 		this.options = options;
// 		this.slug = createSlug();
// 	}
// 
// 	public Poll(String title, HashMap<String,Integer> options, String slug) {
// 		this.title = title;
// 		this.options = options;
// 		this.slug = slug;
// 	}
// 
// 	public Poll(String title, HashMap<String,Integer> options, String slug, User user) {
// 		this.title = title;
// 		this.options = options;
// 		this.user = user;
// 		this.slug = slug;
// 	}
// 
// 	public Poll(String title, HashMap<String,Integer> options, User user) {
// 		this.title = title;
// 		this.options = options;
// 		this.user = user;
// 		this.slug = createSlug();
// 	}
// 
// 	public Poll() {
// 	}
// 
// 	public String getId() {
// 		return id.toHexString();
// 	}
// 
// 	public String getTitle() {
// 		return title;
// 	}
// 
// 	public void setTitle(String name) {
// 		this.title = name;
// 	}
// 
// 	public HashMap<String, Integer> getOptions() {
// 		return options;
// 	}
// 
// 	public void setOptions(HashMap<String, Integer> options) {
// 		this.options = options;
// 	}
// 
// 	private String createSlug() {
// 		return MemeSlugs.getCombo();
// 	}
// 
// 	@JsonIgnore
// 	public User getUser() {
// 		return user;
// 	}
// 
// 	public void setUser(User user) {
// 		this.user = user;
// 	}
// 
// 	public void setSlug(String slug) {
// 		this.slug = slug;
// 	}
// 
// 	public String getSlug() {
// 		return slug;
// 	}
// 
// 	public boolean vote(String option) {
// 		if(!options.containsKey(option)) {
// 			return false;
// 		} else {
// 			int val = options.get(option);
// 			val++;
// 			options.put(option,val);
// 			return true;
// 		}
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		return Objects.hash(id);
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if(this == obj) {
// 			return true;
// 		}
// 		if((obj == null) || (obj.getClass() != this.getClass())) {
// 			return false;
// 		}
// 
// 		Poll poll = (Poll) obj;
// 		return this.getId().equals(poll.getId());
// 	}
// }
// 
// Path: src/main/java/com/pollistics/services/PollService.java
// @Service
// public class PollService {
// 	@Autowired
// 	private PollRepository pollRepo;
// 
// 	public Poll getPoll(String query) {
// 		Poll poll = pollRepo.findBySlug(query);
// 		if(poll == null) {
// 			return pollRepo.findOne(query);
// 		}
// 		return poll;
// 	}
// 
// 	public List<Poll> getAllPolls() {
// 		return pollRepo.findAll();
// 	}
// 
// 	public String createPoll(String title, HashMap<String, Integer> options) {
// 		Poll poll = pollRepo.insert(new Poll(title, options));
// 		return poll.getSlug();
// 	}
// 
// 	public String createPoll(String title, HashMap<String, Integer> options, String slug) {
// 		Poll poll = pollRepo.insert(new Poll(title, options, slug));
// 		return poll.getSlug();
// 	}
// 
// 	public String createPoll(String title, HashMap<String, Integer> options, User user) {
// 		Poll poll = pollRepo.insert(new Poll(title, options, user));
// 		return poll.getSlug();
// 	}
// 
// 	public String createPoll(String title, HashMap<String, Integer> options, String slug, User user) {
// 		Poll poll = pollRepo.insert(new Poll(title, options, slug, user));
// 		return poll.getSlug();
// 	}
// 
// 	public boolean deletePoll(String slug) {
// 		try {
// 			pollRepo.deleteBySlug(slug);
// 			return true;
// 		} catch (Exception e) {
// 			return false;
// 		}
// 	}
// 
// 	public boolean voteOption(Poll p, String option) {
// 		boolean result = p.vote(option);
// 		if (!result) {
// 			return false;
// 		}
// 		pollRepo.save(p); // todo false when not works
// 		return true;
// 	}
// 
// 	public List<Poll> getPolls(User user) {
// 		return pollRepo.findByUser(user);
// 	}
// }


import com.pollistics.models.Poll;
import com.pollistics.services.PollService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.List;
package com.pollistics.controllers;



@RestController
@RequestMapping("/api/1/polls") // todo: this should have a subclass or something for all poll-things
// Path: src/main/java/com/pollistics/models/Poll.java
// @Document(collection="polls")
// public class Poll {
// 	@Id
// 	private ObjectId id;
// 
// 	@Length(min=1, max=500, message="Poll title must be be between 1 and 500 characters")
// 	private String title;
// 	private HashMap<String,Integer> options;
// 	private User user;
// 
// 	@Indexed(unique = true, sparse = true)
// 	private String slug;
// 
// 	// todo: orden these constructors with `this(...arg)`
// 
// 	public Poll(String title, HashMap<String,Integer> options) {
// 		this.title = title;
// 		this.options = options;
// 		this.slug = createSlug();
// 	}
// 
// 	public Poll(ObjectId id, String title, HashMap<String, Integer> options) {
// 		this.id = id;
// 		this.title = title;
// 		this.options = options;
// 		this.slug = createSlug();
// 	}
// 
// 	public Poll(String title, HashMap<String,Integer> options, String slug) {
// 		this.title = title;
// 		this.options = options;
// 		this.slug = slug;
// 	}
// 
// 	public Poll(String title, HashMap<String,Integer> options, String slug, User user) {
// 		this.title = title;
// 		this.options = options;
// 		this.user = user;
// 		this.slug = slug;
// 	}
// 
// 	public Poll(String title, HashMap<String,Integer> options, User user) {
// 		this.title = title;
// 		this.options = options;
// 		this.user = user;
// 		this.slug = createSlug();
// 	}
// 
// 	public Poll() {
// 	}
// 
// 	public String getId() {
// 		return id.toHexString();
// 	}
// 
// 	public String getTitle() {
// 		return title;
// 	}
// 
// 	public void setTitle(String name) {
// 		this.title = name;
// 	}
// 
// 	public HashMap<String, Integer> getOptions() {
// 		return options;
// 	}
// 
// 	public void setOptions(HashMap<String, Integer> options) {
// 		this.options = options;
// 	}
// 
// 	private String createSlug() {
// 		return MemeSlugs.getCombo();
// 	}
// 
// 	@JsonIgnore
// 	public User getUser() {
// 		return user;
// 	}
// 
// 	public void setUser(User user) {
// 		this.user = user;
// 	}
// 
// 	public void setSlug(String slug) {
// 		this.slug = slug;
// 	}
// 
// 	public String getSlug() {
// 		return slug;
// 	}
// 
// 	public boolean vote(String option) {
// 		if(!options.containsKey(option)) {
// 			return false;
// 		} else {
// 			int val = options.get(option);
// 			val++;
// 			options.put(option,val);
// 			return true;
// 		}
// 	}
// 
// 	@Override
// 	public int hashCode() {
// 		return Objects.hash(id);
// 	}
// 
// 	@Override
// 	public boolean equals(Object obj) {
// 		if(this == obj) {
// 			return true;
// 		}
// 		if((obj == null) || (obj.getClass() != this.getClass())) {
// 			return false;
// 		}
// 
// 		Poll poll = (Poll) obj;
// 		return this.getId().equals(poll.getId());
// 	}
// }
// 
// Path: src/main/java/com/pollistics/services/PollService.java
// @Service
// public class PollService {
// 	@Autowired
// 	private PollRepository pollRepo;
// 
// 	public Poll getPoll(String query) {
// 		Poll poll = pollRepo.findBySlug(query);
// 		if(poll == null) {
// 			return pollRepo.findOne(query);
// 		}
// 		return poll;
// 	}
// 
// 	public List<Poll> getAllPolls() {
// 		return pollRepo.findAll();
// 	}
// 
// 	public String createPoll(String title, HashMap<String, Integer> options) {
// 		Poll poll = pollRepo.insert(new Poll(title, options));
// 		return poll.getSlug();
// 	}
// 
// 	public String createPoll(String title, HashMap<String, Integer> options, String slug) {
// 		Poll poll = pollRepo.insert(new Poll(title, options, slug));
// 		return poll.getSlug();
// 	}
// 
// 	public String createPoll(String title, HashMap<String, Integer> options, User user) {
// 		Poll poll = pollRepo.insert(new Poll(title, options, user));
// 		return poll.getSlug();
// 	}
// 
// 	public String createPoll(String title, HashMap<String, Integer> options, String slug, User user) {
// 		Poll poll = pollRepo.insert(new Poll(title, options, slug, user));
// 		return poll.getSlug();
// 	}
// 
// 	public boolean deletePoll(String slug) {
// 		try {
// 			pollRepo.deleteBySlug(slug);
// 			return true;
// 		} catch (Exception e) {
// 			return false;
// 		}
// 	}
// 
// 	public boolean voteOption(Poll p, String option) {
// 		boolean result = p.vote(option);
// 		if (!result) {
// 			return false;
// 		}
// 		pollRepo.save(p); // todo false when not works
// 		return true;
// 	}
// 
// 	public List<Poll> getPolls(User user) {
// 		return pollRepo.findByUser(user);
// 	}
// }


// Path: src/main/java/com/pollistics/controllers/APIController.java
import com.pollistics.models.Poll;
import com.pollistics.services.PollService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.List;

package com.pollistics.controllers;



@RestController
@RequestMapping("/api/1/polls") // todo: this should have a subclass or something for all poll-things
public class APIController {