mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-03 19:54:12 +00:00 
			
		
		
		
	Add posts with surveys support
This commit is contained in:
		@@ -2,6 +2,7 @@ import 'package:comunic/enums/post_kind.dart';
 | 
			
		||||
import 'package:comunic/enums/post_visibility_level.dart';
 | 
			
		||||
import 'package:comunic/enums/user_access_levels.dart';
 | 
			
		||||
import 'package:comunic/helpers/comments_helper.dart';
 | 
			
		||||
import 'package:comunic/helpers/survey_helper.dart';
 | 
			
		||||
import 'package:comunic/lists/comments_list.dart';
 | 
			
		||||
import 'package:comunic/lists/posts_list.dart';
 | 
			
		||||
import 'package:comunic/models/api_request.dart';
 | 
			
		||||
@@ -40,14 +41,11 @@ class PostsHelper {
 | 
			
		||||
  /// Get the list of latest posts. Return the list of posts or null in case of
 | 
			
		||||
  /// failure
 | 
			
		||||
  Future<PostsList> getLatest({int from = 0}) async {
 | 
			
		||||
    final response = await APIRequest(
 | 
			
		||||
      uri: "posts/get_latest",
 | 
			
		||||
      needLogin: true,
 | 
			
		||||
      args: {
 | 
			
		||||
        "include_groups": true.toString(),
 | 
			
		||||
        "startFrom": from.toString(),
 | 
			
		||||
      }
 | 
			
		||||
    ).exec();
 | 
			
		||||
    final response =
 | 
			
		||||
        await APIRequest(uri: "posts/get_latest", needLogin: true, args: {
 | 
			
		||||
      "include_groups": true.toString(),
 | 
			
		||||
      "startFrom": from.toString(),
 | 
			
		||||
    }).exec();
 | 
			
		||||
 | 
			
		||||
    if (response.code != 200) return null;
 | 
			
		||||
 | 
			
		||||
@@ -63,13 +61,10 @@ class PostsHelper {
 | 
			
		||||
  /// Get the list of posts of a user
 | 
			
		||||
  Future<PostsList> getUserPosts(int userID, {int from = 0}) async {
 | 
			
		||||
    final response = await APIRequest(
 | 
			
		||||
        uri: "posts/get_user",
 | 
			
		||||
        needLogin: true,
 | 
			
		||||
        args: {
 | 
			
		||||
          "userID": userID.toString(),
 | 
			
		||||
          "startFrom": from.toString()
 | 
			
		||||
        }
 | 
			
		||||
    ).exec();
 | 
			
		||||
            uri: "posts/get_user",
 | 
			
		||||
            needLogin: true,
 | 
			
		||||
            args: {"userID": userID.toString(), "startFrom": from.toString()})
 | 
			
		||||
        .exec();
 | 
			
		||||
 | 
			
		||||
    if (response.code != 200) return null;
 | 
			
		||||
 | 
			
		||||
@@ -102,7 +97,8 @@ class PostsHelper {
 | 
			
		||||
      needLogin: true,
 | 
			
		||||
      args: {
 | 
			
		||||
        "postID": id.toString(),
 | 
			
		||||
        "new_level": _APIPostsVisibilityLevelMap.map((k, v) => MapEntry(v, k))[level]
 | 
			
		||||
        "new_level":
 | 
			
		||||
            _APIPostsVisibilityLevelMap.map((k, v) => MapEntry(v, k))[level]
 | 
			
		||||
      },
 | 
			
		||||
    ).exec())
 | 
			
		||||
        .isOK;
 | 
			
		||||
@@ -120,6 +116,8 @@ class PostsHelper {
 | 
			
		||||
 | 
			
		||||
  /// Turn an API entry into a [Post] object
 | 
			
		||||
  Post _apiToPost(Map<String, dynamic> map) {
 | 
			
		||||
    final postKind = _APIPostsKindsMap[map["kind"]];
 | 
			
		||||
 | 
			
		||||
    // Parse comments
 | 
			
		||||
    CommentsList comments;
 | 
			
		||||
    if (map["comments"] != null) {
 | 
			
		||||
@@ -128,28 +126,32 @@ class PostsHelper {
 | 
			
		||||
          .forEach((v) => comments.add(CommentsHelper.apiToComment(v)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    final survey = postKind == PostKind.SURVEY
 | 
			
		||||
        ? SurveyHelper.apiToSurvey(map["data_survey"])
 | 
			
		||||
        : null;
 | 
			
		||||
 | 
			
		||||
    return Post(
 | 
			
		||||
      id: map["ID"],
 | 
			
		||||
      userID: map["userID"],
 | 
			
		||||
      userPageID: map["user_page_id"],
 | 
			
		||||
      groupID: map["group_id"],
 | 
			
		||||
      timeSent: map["post_time"],
 | 
			
		||||
      content: map["content"],
 | 
			
		||||
      visibilityLevel: _APIPostsVisibilityLevelMap[map["visibility_level"]],
 | 
			
		||||
      kind: _APIPostsKindsMap[map["kind"]],
 | 
			
		||||
      fileSize: map["file_size"],
 | 
			
		||||
      fileType: map["file_type"],
 | 
			
		||||
      filePath: map["file_path"],
 | 
			
		||||
      fileURL: map["file_path_url"],
 | 
			
		||||
      timeEnd: map["time_end"],
 | 
			
		||||
      linkURL: map["link_url"],
 | 
			
		||||
      linkTitle: map["link_title"],
 | 
			
		||||
      linkDescription: map["link_description"],
 | 
			
		||||
      linkImage: map["link_image"],
 | 
			
		||||
      likes: map["likes"],
 | 
			
		||||
      userLike: map["userlike"],
 | 
			
		||||
      access: _APIUserAccessMap[map["user_access"]],
 | 
			
		||||
      comments: comments,
 | 
			
		||||
    );
 | 
			
		||||
        id: map["ID"],
 | 
			
		||||
        userID: map["userID"],
 | 
			
		||||
        userPageID: map["user_page_id"],
 | 
			
		||||
        groupID: map["group_id"],
 | 
			
		||||
        timeSent: map["post_time"],
 | 
			
		||||
        content: map["content"],
 | 
			
		||||
        visibilityLevel: _APIPostsVisibilityLevelMap[map["visibility_level"]],
 | 
			
		||||
        kind: postKind,
 | 
			
		||||
        fileSize: map["file_size"],
 | 
			
		||||
        fileType: map["file_type"],
 | 
			
		||||
        filePath: map["file_path"],
 | 
			
		||||
        fileURL: map["file_path_url"],
 | 
			
		||||
        timeEnd: map["time_end"],
 | 
			
		||||
        linkURL: map["link_url"],
 | 
			
		||||
        linkTitle: map["link_title"],
 | 
			
		||||
        linkDescription: map["link_description"],
 | 
			
		||||
        linkImage: map["link_image"],
 | 
			
		||||
        likes: map["likes"],
 | 
			
		||||
        userLike: map["userlike"],
 | 
			
		||||
        access: _APIUserAccessMap[map["user_access"]],
 | 
			
		||||
        comments: comments,
 | 
			
		||||
        survey: survey);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										55
									
								
								lib/helpers/survey_helper.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								lib/helpers/survey_helper.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
import 'package:comunic/models/api_request.dart';
 | 
			
		||||
import 'package:comunic/models/survey.dart';
 | 
			
		||||
import 'package:comunic/models/survey_choice.dart';
 | 
			
		||||
import 'package:meta/meta.dart';
 | 
			
		||||
 | 
			
		||||
/// Survey helper
 | 
			
		||||
///
 | 
			
		||||
/// @author Pierre HUBERT
 | 
			
		||||
 | 
			
		||||
class SurveyHelper {
 | 
			
		||||
  /// Cancel the response of a user to a survey
 | 
			
		||||
  Future<bool> cancelResponse(Survey survey) async {
 | 
			
		||||
    return (await APIRequest(
 | 
			
		||||
            uri: "surveys/cancel_response",
 | 
			
		||||
            needLogin: true,
 | 
			
		||||
            args: {"postID": survey.postID.toString()}).exec())
 | 
			
		||||
        .isOK;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Send the response of a user to a survey
 | 
			
		||||
  Future<bool> respondToSurvey(
 | 
			
		||||
      {@required Survey survey, @required SurveyChoice choice}) async {
 | 
			
		||||
    assert(survey != null);
 | 
			
		||||
    assert(choice != null);
 | 
			
		||||
 | 
			
		||||
    return (await APIRequest(
 | 
			
		||||
      uri: "surveys/send_response",
 | 
			
		||||
      needLogin: true,
 | 
			
		||||
      args: {
 | 
			
		||||
        "postID": survey.postID.toString(),
 | 
			
		||||
        "choiceID": choice.id.toString(),
 | 
			
		||||
      },
 | 
			
		||||
    ).exec())
 | 
			
		||||
        .isOK;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Turn an API entry into a [Survey] object
 | 
			
		||||
  static Survey apiToSurvey(Map<String, dynamic> map) {
 | 
			
		||||
    // Parse survey responses
 | 
			
		||||
    Set<SurveyChoice> choices = Set();
 | 
			
		||||
 | 
			
		||||
    map["choices"].forEach((k, e) => choices.add(SurveyChoice(
 | 
			
		||||
        id: e["choiceID"], name: e["name"], responses: e["responses"])));
 | 
			
		||||
 | 
			
		||||
    return Survey(
 | 
			
		||||
      id: map["ID"],
 | 
			
		||||
      userID: map["userID"],
 | 
			
		||||
      postID: map["postID"],
 | 
			
		||||
      creationTime: map["creation_time"],
 | 
			
		||||
      question: map["question"],
 | 
			
		||||
      userChoice: map["user_choice"],
 | 
			
		||||
      choices: choices,
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user