Skip to content

Commit

Permalink
Merge pull request #32 from CodeURJC-DAW-2022-23/feat/functional_admi…
Browse files Browse the repository at this point in the history
…n_panel

feat: admin panel
  • Loading branch information
Vicente1215 authored Mar 11, 2023
2 parents f7773ed + 0ac8ad0 commit bdb2398
Show file tree
Hide file tree
Showing 10 changed files with 305 additions and 19 deletions.
Original file line number Diff line number Diff line change
@@ -1,26 +1,76 @@
package net.daw.alist.controllers;

import net.daw.alist.models.Topic;
import net.daw.alist.models.User;
import net.daw.alist.services.TopicService;
import net.daw.alist.services.UserService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import net.daw.alist.services.PostService;
import net.daw.alist.services.UserService;
import net.daw.alist.utils.Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@Controller
public class AdminPanelController {

@Autowired
private UserService userService;
@Autowired
private TopicService topicService;
@Autowired
private PostService postService;

@GetMapping("/admin-panel")
public String adminPanel(Model model) {
List<User> userList = userService.findAll();
User admin = userService.findByUsername("admin");
userList.remove(admin);
model.addAttribute("users", userList);

List<Topic> topicList = topicService.findAll();
model.addAttribute("topics", topicList);

Utils utils = new Utils(userService, postService);
utils.searchBarInitializer(model);
return "admin-panel";
}

@GetMapping("/admin-panel/delete/{id}")
public String deleteFromTopic(Model model, @PathVariable long id) {
Topic topic = topicService.findById(id);
topicService.delete(topic);
return "redirect:/admin-panel";
}


@RequestMapping("/addTopic")
public String addTopic(Model model, @RequestParam String topicName) {
Topic topic = new Topic(topicName, "");
topicService.save(topic);
return "redirect:/admin-panel";
}

@GetMapping("/admin-panel/lock/{id}")
public String changeLockUser(Model model, @PathVariable long id) {
User user = userService.findById(id);
if (user.isLocked()) {
userService.unbanUser(user.getUsername());
} else {
userService.banUser(user.getUsername());
}

return "redirect:/admin-panel";
}

}
48 changes: 48 additions & 0 deletions back/src/main/java/net/daw/alist/controllers/ChartController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package net.daw.alist.controllers;

import java.util.*;

import net.daw.alist.models.Post;
import net.daw.alist.models.Topic;
import net.daw.alist.services.PostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ChartController {

@Autowired
private PostService postService;

@GetMapping("/chart")
public List<Object> calculateChart() {

List<Object> counters = calculateUsedTopics();
return calculateUsedTopics();
}

private List<Object> calculateUsedTopics(){
List<Object> counter = new ArrayList<>();
List<Post> posts = postService.findAll();
Map<String, Integer> map = new HashMap<>();
for (Post post:posts) {
List<Topic> topics = post.getTopics();
for (Topic topic:topics) {
if(map.containsKey(topic.getName())){
Integer repetition = map.get(topic.getName());
map.put(topic.getName(), repetition+1);
}else{
map.put(topic.getName(), 1);
}
}
}
Set<String> keySet = map.keySet();
for(String string: keySet){
counter.add(string);
counter.add(map.get(string));
}
return counter;
}

}
11 changes: 11 additions & 0 deletions back/src/main/java/net/daw/alist/repositories/TopicRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,22 @@
import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

import javax.transaction.Transactional;

@Repository
@Transactional
public interface TopicRepository extends JpaRepository<Topic, Long> {

List<Topic> findAll();

Optional<Topic> findByName(String name);


@Query(value = "SELECT name FROM Topic t")
List<String> findAllTopicNames();
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package net.daw.alist.repositories;

import net.daw.alist.models.User;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import javax.transaction.Transactional;
import java.util.List;
import java.util.Optional;

@Repository
Expand All @@ -20,6 +22,25 @@ public interface UserRepository extends JpaRepository<User, Long> {
@Modifying
@Query("UPDATE User a " +
"SET a.enabled = TRUE WHERE a.email = ?1")
public int enableUser(String email);
public void enableUser(String email);

@Transactional
@Modifying
@Query("UPDATE User u " +
"SET u.locked = TRUE WHERE u.username = ?1")
public void banUser (String username);

@Transactional
@Modifying
@Query("UPDATE User u " +
"SET u.locked = FALSE WHERE u.username = ?1")
public void unbanUser (String username);

@Query(value = "SELECT username FROM User u")
List<String> findAllUsernames();





}
3 changes: 1 addition & 2 deletions back/src/main/java/net/daw/alist/services/PostService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import lombok.AllArgsConstructor;
import net.daw.alist.models.Post;
import net.daw.alist.models.User;
import net.daw.alist.repositories.PostRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
Expand All @@ -23,7 +22,7 @@ public class PostService {
public Page<Post> getPosts(int pageNumber) {
return postRepository.findAll(PageRequest.of(pageNumber, pageSize));
}

public Page<Post> getStarredPosts(int pageNumber, int user_id) {
return postRepository.findPostsByFollows(user_id,PageRequest.of(pageNumber,pageSize));
}
Expand Down
15 changes: 15 additions & 0 deletions back/src/main/java/net/daw/alist/services/TopicService.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,19 @@ public List<Topic> getTopics(List<String> topicNames) {
return topics;
}

public List<Topic> findAll() {
return topicRepository.findAll();
}

public Topic findById(long id) {
return topicRepository.findById(id).orElseThrow();
}

public void delete(Topic topic) {
topicRepository.delete(topic);
}

public void save(Topic topic) {
topicRepository.save(topic);
}
}
21 changes: 19 additions & 2 deletions back/src/main/java/net/daw/alist/services/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,27 @@ public String register(User user) {
return "token=" + token;
}

public int enableUser(String email) {
return userRepository.enableUser(email);
public void enableUser(String email) {
userRepository.enableUser(email);
}

public void unbanUser(String username) {
userRepository.unbanUser(username);
}

public void banUser(String username) {
userRepository.banUser(username);
}

public User findByUsername(String string) {
return userRepository.findByUsername(string).orElseThrow();
}

public List<User> findAll() {
return userRepository.findAll();
}

public User findById(long id) {
return userRepository.findById(id).orElseThrow();
}
}
57 changes: 57 additions & 0 deletions back/src/main/resources/static/scripts/create-chart.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// Load google charts
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);

function sortArray(arr) {
return arr.sort((a, b) => a[0] - b[0]);
}

// Draw the chart and set the chart values
function drawChart() {
$.ajax({
url: '/chart'
}).done(function(counters) {


let result = [];
for (let i = 0; i < counters.length; i += 2) {
result.push([counters[i], counters[i+1]]);
}
result = sortArray(result);
result.reverse();

topic1 = result[0];
topic2 = result[1];
topic3 = result[2];
topic4 = result[3];
topic5 = result[4];


var data = google.visualization.arrayToDataTable([
['Topic', 'Comments Number'],
[String(topic1[0]), Number(topic1[1])],
[String(topic2[0]), Number(topic2[1])],
[String(topic3[0]), Number(topic3[1])],
[String(topic4[0]), Number(topic4[1])],
[String(topic5[0]), Number(topic5[1])]
]);

var options = {
backgroundColor: 'red',
titleTextStyle: {color: 'white'},
backgroundColor: 'transparent',
chartArea: {width: '100%', height: '85%'},
legend: { position: 'right', alignment: 'center', textStyle: { color: 'white', fontSize: 16 } },
colors: ['#69c0a1', '#6399A4', '#426f76', '#203E4F', '#356E57']
};

// Display the chart inside the <div> element with id="piechart"
var chart = new google.visualization.PieChart(document.getElementById('piechart'));
chart.draw(data, options);
window.onresize = RedibujarGrafica;

function RedibujarGrafica() {
google.charts.setOnLoadCallback(drawChart);
};
});
}
21 changes: 21 additions & 0 deletions back/src/main/resources/static/styles/admin-panel.css
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,27 @@ a:hover {
color: #63b1b1;
}

ul {
list-style-type: none;
margin: 0;
padding: 0;
}

.listItem, form{
width: 100%;
}

.listItemLocked{
width: 100%;
background-color: rgb(126, 64, 64);
}

@media only screen and (min-width: 768px) {
/* For desktop: */
.listItem, .listItemLocked, form{
width: 75%;
}



}
Loading

0 comments on commit bdb2398

Please sign in to comment.